C++ #ifdef和未声明的标识符

C++ #ifdef和未声明的标识符,c++,visual-studio-2017,C++,Visual Studio 2017,我在Visual Studio 2017中开发了一个项目。以下代码: #ifdef MY_DEFINE #else std::string txt = "abc"; #endif output += txt; 未编译-我收到一个错误:'txt':未声明的标识符 MY_DEFINE未定义,else分支已编译。该代码是更大项目的一部分。我无法在默认的简单控制台应用程序中重现该编译错误。这是否意味着项目可能有导致编译错误的设置?您可以使用\error指令检查实际发生的情

我在Visual Studio 2017中开发了一个项目。以下代码:

#ifdef MY_DEFINE
#else
    std::string txt = "abc";
#endif

output += txt;
未编译-我收到一个错误:
'txt':未声明的标识符


MY_DEFINE未定义,else分支已编译。该代码是更大项目的一部分。我无法在默认的简单控制台应用程序中重现该编译错误。这是否意味着项目可能有导致编译错误的设置?

您可以使用
\error
指令检查实际发生的情况:

#ifdef MY_DEFINE
#error It was defined
#else
#error It was NOT defined
    std::string txt = "abc";
#endif

output += txt;

可能是
MY_DEFINE
实际上是在您包含的其他头文件中定义的。通常,在VisualStudio中确定这一点的最简单方法是将鼠标光标悬停在标识符上,然后查看其内容,或者按住ctrl键并单击以转到定义。但有时IDE中的这些提示并不完全符合您编译的结果。

您可以使用
\error
指令检查实际情况:

#ifdef MY_DEFINE
#error It was defined
#else
#error It was NOT defined
    std::string txt = "abc";
#endif

output += txt;

可能是
MY_DEFINE
实际上是在您包含的其他头文件中定义的。通常,在VisualStudio中确定这一点的最简单方法是将鼠标光标悬停在标识符上,然后查看其内容,或者按住ctrl键并单击以转到定义。但有时IDE中的这些提示并不完全符合您编译的结果。

如果您在源代码中进行了完整的文本搜索,却没有找到任何
MY\u DEFINE
的定义。。。请考虑在命令行上定义宏的另一种选择。通常,它是
-D
,但MSVC++使用。(我们通常使用此类命令行定义来区分编译某个库/DLL时是否包含标题,即分别在
dllexport
/
dllimport
之间切换。)如果您在源代码中进行了完整的文本搜索,但未找到
MY_DEFINE
的任何定义。。。请考虑在命令行上定义宏的另一种选择。通常,它是
-D
,但MSVC++使用。(我们通常使用此类命令行定义来区分编译特定库/DLL时是否包含头,即分别在
dllexport
/
dllimport
之间切换。)