c++ - 已初始化静态变量的警告 C26495

标签 c++ visual-studio mfc

我真的不明白为什么我的构造函数中会收到关于 m_pszDriverPreferredm_pszDriverSearchTerms 的警告 C26495。

头文件

class CMyClass : CBaseClass
{
private:
    static LPCTSTR m_pszDriverPreferred;
    static LPCTSTR m_pszDriverSearchTerms;

public:
    CMyClass(LPCTSTR pszArg1, LPCTSTR pszArg2);
    ~CMyClass();
};

源文件

LPCTSTR CMyClass::m_pszDriverPreferred = _T("Blah, blah, blah");
LPCTSTR CMyClass::m_pszDriverSearchTerms = _T("Blah, blah, blah");

CMyClass::CMyClass(LPCTSTR pszDriver, LPCTSTR pszConnectionString) // <<<- WARNING HERE!
    : CBaseClass(pszDriver, pszConnectionString)
{
}

警告

MyFile(11): warning C26495: Variable 'CMyClass::m_pszDriverPreferred' is uninitialized. Always initialize a member variable (type.6).

MyFile(11): warning C26495: Variable 'CMyClass::m_pszDriverSearchTerms' is uninitialized. Always initialize a member variable (type.6).

首先,这些变量已经被初始化,正如你在上面看到的。其次,当变量是静态时,为什么我会在实例构造函数上收到此警告?

有谁知道这个警告在这里有意义的任何角度?

最佳答案

我不知道为什么这有效,但对我来说非常相似的代码!尝试如下所示的看似微不足道的编辑:

class CMyClass : CBaseClass
{
private:
//  static LPCTSTR m_pszDriverPreferred;
//  static LPCTSTR m_pszDriverSearchTerms;
    static const TCHAR* m_pszDriverPreferred;
    static const TCHAR* m_pszDriverSearchTerms;

public:
    CMyClass(LPCTSTR pszArg1, LPCTSTR pszArg2);
    ~CMyClass();
};

//LPCTSTR CMyClass::m_pszDriverPreferred = _T("Blah, blah, blah");
//LPCTSTR CMyClass::m_pszDriverSearchTerms = _T("Blah, blah, blah");
const TCHAR* CMyClass::m_pszDriverPreferred = _T("Blah, blah, blah");
const TCHAR* CMyClass::m_pszDriverSearchTerms = _T("Blah, blah, blah");

也许与 VS header 中 LPCTSTR 的“复杂”类型定义有关? (使用 _Null_terminated_ 宏/属性,它本身定义为 _SAL2_Source_ 宏!)

关于c++ - 已初始化静态变量的警告 C26495,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57431247/

相关文章:

visual-studio - 我可以使用 Visual Studio Express 版本生成商业代码吗?

c++ - 是否可以从非托管 C++ 访问 Winforms?

c++ - 从链表c++中删除最后一个节点

c# - 如何在 VS 2010 中为变量/字段/列表编写注释/文档?

c# - 毛玻璃窗上的非客户绘画

c# - 是否可以从 Visual Studio 编译 C# 程序以在 Mac 上运行?

c++ - 屏幕截图仅返回黑色图像

c++ - 在 MFC 应用程序中创建和使用 Dll

c++ - 在 Linux 中分发 QT 应用程序

c++ - 无法在 Windows 8 的 Cygwin 上编译基本的 C++ 程序