C++ “标识符”未声明的标识符
现在我试图将代码中的字符集从多字节改为unicode,但当我编译这段代码时,我遇到了一个错误,这就是我的错误C++ “标识符”未声明的标识符,c++,visual-studio,visual-c++,mfc,C++,Visual Studio,Visual C++,Mfc,现在我试图将代码中的字符集从多字节改为unicode,但当我编译这段代码时,我遇到了一个错误,这就是我的错误 error C2065: 'LtszCommConfigFile' : undeclared identifier 我不知道为什么会发生这种情况,我已经声明了LtszCommConfigFile标识符,但仍然得到了那个错误 这是我的完整代码 CString CCommApiHelper::GetTerminalNum(LPCTSTR lpszCommonPath, BOOL bIsC
error C2065: 'LtszCommConfigFile' : undeclared identifier
我不知道为什么会发生这种情况,我已经声明了LtszCommConfigFile标识符,但仍然得到了那个错误
这是我的完整代码
CString CCommApiHelper::GetTerminalNum(LPCTSTR lpszCommonPath, BOOL bIsCyber)
{
TCHAR tszCommConfigFile[MAX_PATH] = {0, };
TCHAR tszTermNum[9] = {0, };
CString strTermNum;
_stprintf(tszCommConfigFile, L"%s\\CommInfo.ini", lpszCommonPath);
if ( GetPrivateProfileInt(L"TEST_INFO", L"IS_TERM_ID", 0, tszCommConfigFile) == 1 )
{
GetPrivateProfileString(L"TEST_INFO", L"TERM_ID", L"A0000000", tszTermNum, sizeof(tszTermNum), tszCommConfigFile);
strTermNum = tszTermNum;
return strTermNum;
}
int x1, x2, x3, x4;
x1 = GetPrivateProfileIntA("IP_INFO", "A_CLASS", 0, _T(tszCommConfigFile));
x2 = GetPrivateProfileIntA("IP_INFO", "B_CLASS", 0, _T(tszCommConfigFile));
x3 = GetPrivateProfileIntA("IP_INFO", "C_CLASS", 0, _T(tszCommConfigFile));
x4 = GetPrivateProfileIntA("IP_INFO", "D_CLASS", 0, _T(tszCommConfigFile));
if ( (x2 / 10) == 10 ) tszTermNum[1] += '1'; // 105 or 109
else if ( (x2 / 10) == 20 ) tszTermNum[1] += '2'; // 205 or 209
else tszTermNum[1] += '0';
_stprintf(&tszTermNum[2], L"%03d%03d", x3, x4);
strTermNum = tszTermNum;
return strTermNum;
}
谢谢\T仅用于字符串文字,例如hello world。不能在变量上使用它
_T和TEXT、TCHAR和LPCTSTR等都是古老的历史,在20世纪90年代人们想要编写在windows95和windowsxp上都能工作的代码时使用。在现代代码中根本没有理由使用它们
相反,窄字符ASCII使用char和相关类型,宽字符Unicode使用wchar\u t和相关类型
您的特定错误似乎是使用GetPrivateProfileIntA,而您本应使用GetPrivateProfileIntW。i、 e
发布完整的代码,使错误中的标识符至少可以显示在代码中。您只能将_T宏应用于字符串文字,而不是变量名。但是问问你自己,你是否真的想/需要编译同一代码的ANSI和Unicode版本,否则就把那些TCHAR和_T一起删除,然后使用宽版本。你的标题说你的变量以L开头,但它以T开头。我想你是说我。。。。
x1 = GetPrivateProfileIntW(L"IP_INFO", L"A_CLASS", 0, tszCommConfigFile);