这个C ++程序有什么问题?

时间:2011-05-04 09:07:29

标签: c++

编译此程序时:

#include<iostream>

using namespace std; 

std::cout<<"before main"<<endl;

int main()  
{

}

...我在编译器中看到了这个错误:

  

错误:预期的构造函数,   析构函数,或类型转换之前   '&LT;&LT;'令牌

请帮助我了解这意味着什么以及我的计划有什么问题?

5 个答案:

答案 0 :(得分:12)

你看到了这个错误,因为你的

std::cout<<"before main"<<endl;

语句必须在main()函数(或其他函数)的范围内才能使该程序有效:

int main()
{
   std::cout<<"before main"<<endl;
}

与您的具体问题无关,还有一点:您using namespace std std:: std::cout上的明确{{1}}是多余的。

答案 1 :(得分:7)

语句无法在函数外执行。

但是,如果你创建用于初始化全局变量的表达式,那么在编译器不会给出任何错误或警告的意义上这是可以的。

例如,以下代码将打印您要打印的内容:

#include <iostream>

std::ostream &gout = std::cout<<"before main"<< std::endl;

int main() { }

输出:

before main

在线演示:http://www.ideone.com/Hz4qu


这里我做的几乎与本主题相同:

Is main() really start of a C++ program?

答案 2 :(得分:4)

你不能写

std::cout<<"before main"<<endl;

在一个函数之外。

- 编辑 -
c ++程序的单一入口点是主要功能。在执行main函数之前可能发生的唯一事情是静态/全局变量的初始化。

static int i = print_before_main_and_return_an_int();

答案 3 :(得分:3)

您必须在函数内定义行。

std::cout<<"before main"<<endl;

答案 4 :(得分:0)

以上答案是正确的,但只是添加。如果您已经拥有:

#include<iostream>
using namespace std;

你不必输入:

std::cout<<"before main"<<endl;

您只需输入:

即可
cout<<"before main"<<endl;

因为你已经声明了你的using namespace std;可以节省一点打字。 干杯!