我真的不明白为什么我的构造函数中会收到关于 m_pszDriverPreferred
和 m_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/