编译此程序时:
#include<iostream>
using namespace std;
std::cout<<"before main"<<endl;
int main()
{
}
...我在编译器中看到了这个错误:
错误:预期的构造函数, 析构函数,或类型转换之前 '&LT;&LT;'令牌
请帮助我了解这意味着什么以及我的计划有什么问题?
答案 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
这里我做的几乎与本主题相同:
答案 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;可以节省一点打字。 干杯!