【问题标题】:"Identifier" Undeclared Identifier“标识符”未声明的标识符
【发布时间】:2020-12-14 08:41:17
【问题描述】:

现在我尝试将代码上的字符集从多字节更改为 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 宏应用于字符串文字,而不是变量名。但问问自己,您是否真的想要/需要编译同一代码的同时编译 ANSI 和 Unicode 版本,否则完全放弃那些 TCHAR_T,并使用广泛的版本。
  • 你的标题说你的变量以 L 开头,但它以 t 开头。我假设你的意思是 L"..."。

标签: c++ visual-studio visual-c++ mfc


【解决方案1】:

_T 仅用于字符串文字(例如“hello world”)。你不能在变量上使用它。

_TTEXTTCHARLPCTSTR 等是古老的历史,用于 1990 年代,当时人们想要编写可在 Windows 95 和 Windows XP 上运行的代码。完全没有理由在现代代码中使用它们。

改为将char 和相关类型用于窄字符 (ASCII),将wchar_t 和相关类型用于宽字符 (Unicode)。

您的具体错误似乎是使用GetPrivateProfileIntA,而您应该使用GetPrivateProfileIntW。即

x1 = GetPrivateProfileIntW(L"IP_INFO", L"A_CLASS", 0, tszCommConfigFile);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2016-04-09
    • 2020-12-09
    • 2016-04-22
    相关资源
    最近更新 更多