C++ #ifdef和未声明的标识符
我在Visual Studio 2017中开发了一个项目。以下代码: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指令检查实际发生的情
#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
之间切换。)