条件编译,错误:' cout'没有命名类型

时间:2015-12-20 12:10:39

标签: c++

我正在学习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编译器。

2 个答案:

答案 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::coutstd::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; 
}