我正在学习http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor-and-header-guards/教程中的标题保护。 在解释标题保护的想法之前,作者使用了这个代码(我复制到我的程序中)来解释条件编译的想法。
#include <iostream>
#define PRINT_JOE
using namespace std;
#ifdef PRINT_JOE
cout << "Joe" << endl;
#endif
#ifdef PRINT_BOB
cout << "Bob" << endl;
#endif
int main()
{
}
我收到的错误如下:
C:\Users\Administrator\Desktop\Test_programs\header_guards.cpp|5|error: 'cout' does not name a type|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
教程的作者声明PRINT_JOE会编译,因为它是#defined而PRINT_BOB不会因为它不是#defined而编译。但是编译器会出错。我从this学到了C ++中的语句需要在函数内部。但是一个人不会在int main()中使用#define指令。我正在使用gnu gcc编译器。
答案 0 :(得分:3)
您的cout
语句必须在函数中。在我的头脑中,唯一可以在全局范围内的东西是全局变量声明和预处理器指令。这意味着仅#define
或#ifdef
就可以了,所有cout
内容都不会。
#include <iostream>
#define PRINT_JOE
int main()
{
#ifdef PRINT_JOE
std::cout << "Joe" << std::endl;
#endif
#ifdef PRINT_BOB
std::cout << "Bob" << std::endl;
#endif
}
它还是std::cout
和std::endl
答案 1 :(得分:1)
将你的cout调用放入主函数
#include <iostream>
#define PRINT_JOE
using namespace std;
int main()
{
#ifdef PRINT_BOB
cout << "Bob" << endl;
#endif
#ifdef PRINT_JOE
cout << "Joe" << endl;
#endif
return 0;
}