C++ extern全局变量在函数外修改报does not name a type错误原因咨询
错误原因详解
你遇到的编译错误本质是C++语法对全局作用域的代码内容有严格限制,具体原因分两点:
- 第一,C++规定全局作用域仅允许放置声明、定义类语句,不允许直接放置可执行语句。
你在main.cpp的函数外写的global_var += 100;属于赋值操作的可执行语句,不属于全局作用域支持的语句类型,本身就不符合语法规范。 - 第二,编译器报错
global_var does not name a type的具体逻辑是:
编译器解析全局作用域的代码时,默认期望每一行的开头是类型关键字(比如int、class这类),用于声明/定义变量、函数、类等实体。当它扫描到以global_var开头的行时,会默认将global_var识别为你要声明的新变量的类型,但global_var本身是个已声明的int变量,不是类型名,因此直接抛出该错误。
补充说明:全局作用域只有在变量定义的同时做初始化是合法的,比如
int a = 10;属于定义+初始化,是合法语句;但拆分出来单独写a += 10;就属于执行语句,不能放在全局作用域。
把global_var += 100;放到main函数内部就正常的原因是:函数内部是可执行语句的合法运行上下文,代码会在程序启动进入main函数后按顺序执行,符合语法要求。
内容的提问来源于stack exchange,提问作者Majd Soubh
相关产品推荐
相关产品推荐

