Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “标识符”未声明的标识符_C++_Visual Studio_Visual C++_Mfc - Fatal编程技术网

C++ “标识符”未声明的标识符

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

现在我试图将代码中的字符集从多字节改为unicode,但当我编译这段代码时,我遇到了一个错误,这就是我的错误

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);