C++全局数组初始化后在main函数外打印报错,请求排查问题
问题解析:全局作用域中直接执行cout语句的错误
先把你给出的代码贴出来方便分析:
#include <iostream> using namespace std; int global_array[5] = {10,20,30,40,50}; cout << global_array[2]; int main() { cout << "Hello World!" ; }
你遇到的错误error: 'cout' does not name a type,本质原因是C++不允许在全局作用域中直接写执行语句。
咱们得捋清楚C++代码的执行规则:全局作用域里只能放变量、函数的声明、定义或者初始化代码,像cout << global_array[2];这种属于函数调用的执行语句,必须放在函数体内部(比如main()函数里,或者你自定义的其他函数里)。
编译器看到全局域里的cout << ...时,会误以为你在声明某种类型(因为全局域里只能有这类东西),但cout明显不是类型名,所以就抛出了这个看起来有点绕的错误提示。
修正方法很简单,把那段打印语句移到main()函数里就行,比如:
#include <iostream> using namespace std; int global_array[5] = {10,20,30,40,50}; int main() { cout << global_array[2] << endl; // 把打印逻辑移到函数体内 cout << "Hello World!" ; }
这样运行就能正常输出30和Hello World!啦。
内容的提问来源于stack exchange,提问作者Shobhit Mittal
相关产品推荐
相关产品推荐

