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

What's wrong with this C++ program?

本文关键字:问题 什么 C++ 程序 这个      更新时间:2023-10-16

当我编译这个程序时:

#include<iostream>
using namespace std; 
std::cout<<"before main"<<endl;
int main()  
{
}

…我从编译器中看到这个错误:

error:期望的构造函数,析构函数,或之前的类型转换"& lt; & lt;"牌

请帮我理解这是什么意思,我的程序出了什么问题?

你看到这个错误是因为你的

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

语句需要在main()函数(或其他函数)的范围内,以便该程序有效:

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

与您的具体问题无关,另外一点:由于您是using namespace std, std::cout上明确的std::是多余的。

语句不能在函数外执行。

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

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

#include <iostream>
std::ostream &gout = std::cout<<"before main"<< std::endl;
int main() { }
输出:

before main

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


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

main()真的是c++程序的开始吗?

你不能写

std::cout<<"before main"<<endl;
函数外的

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

static int i = print_before_main_and_return_an_int();

必须在函数内部定义行。

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

以上答案是正确的,但只是为了补充,如果你已经有:

#include<iostream>
using namespace std;

你不需要输入:

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

你可以直接输入:

cout<<"before main"<<endl;

因为你已经声明了你的using命名空间std;可以节省你打字的时间。干杯!