Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当extern const被赋值为新值而没有任何错误时,程序失败。需要解释一下吗_C++_Extern - Fatal编程技术网

C++ 当extern const被赋值为新值而没有任何错误时,程序失败。需要解释一下吗

C++ 当extern const被赋值为新值而没有任何错误时,程序失败。需要解释一下吗,c++,extern,C++,Extern,我在main.cpp中有一个extern const int变量,我在mathFunctions.cpp中使用它。如果我试图修改mathFunctions.cpp中的变量,则程序失败。 我使用C++ 11的代码块的最新VISION。 如果我不尝试修改变量,程序运行良好 //main.cpp #包括 使用名称空间std; 外部常数int valueTen=10; int附加值(int); int main() { cout编译main.cpp文件时,语句extern const int value

我在main.cpp中有一个extern const int变量,我在mathFunctions.cpp中使用它。如果我试图修改mathFunctions.cpp中的变量,则程序失败。 我使用C++ 11的代码块的最新VISION。 如果我不尝试修改变量,程序运行良好

//main.cpp
#包括
使用名称空间std;
外部常数int valueTen=10;
int附加值(int);
int main()
{

cout编译
main.cpp
文件时,语句
extern const int valueTen=10;
告诉编译器
valueTen
变量是一个常量,在运行时不会更改。通常,这会向链接器“传递”一个信号,表明它可以在内存区域中为该变量分配空间使用
READONLY
属性创建


编译
mathFunctions.cpp
文件时,语句
extern int valueTen;
告诉编译器
valueTen
是一个整数变量,其定义由另一个模块提供。在该文件中,没有任何内容告诉编译器
valueTen
const
,因此您不会得到包含修改其值的代码时出现编译器错误

但是,当您构建了程序(链接了所有单独的模块)后,
valueTen++;
语句生成的代码将尝试修改位于
只读
内存中的内容,这将导致程序崩溃,并显示一条“访问冲突”消息


请随时要求进一步的澄清和/或解释。

编译
main.cpp
文件时,语句
extern const int valueTen=10;
告诉编译器
valueTen
变量是一个常量,在运行时不会更改。通常,这将向链接器“传递”信号它可以使用
READONLY
属性在内存区域中为该变量分配空间


编译
mathFunctions.cpp
文件时,语句
extern int valueTen;
告诉编译器
valueTen
是一个整数变量,其定义由另一个模块提供。在该文件中,没有任何内容告诉编译器
valueTen
const
,因此您不会得到包含修改其值的代码时出现编译器错误

但是,当您构建了程序(链接了所有单独的模块)后,
valueTen++;
语句生成的代码将尝试修改位于
只读
内存中的内容,这将导致程序崩溃,并显示一条“访问冲突”消息


请随时要求进一步的澄清和/或解释。

为什么您试图修改
const
变量?您知道
const
的意思/作用吗?是的,我知道。由于我是CPP的新手,我试图理解在这种情况下我会遇到的错误。我试图理解在这种情况下我会遇到的错误。您会得到的“程序失败了”。非常正确。但是在IDE中,我得到了进程终止,但没有正确的错误指示它终止的原因。这是因为你对编译器撒谎。当你撒谎时,你会遇到麻烦(至少在某些时候)。你为什么试图修改
const
变量?你知道
const
的意思/作用吗?是的,我知道。因为我是CPP的新手,我试图理解在这种情况下我会遇到的错误。我试图理解在这种情况下我会遇到的错误。你会得到“程序失败”“。非常正确。但在IDE中,我正在终止进程,但没有正确的错误指示进程终止的原因。这是因为你对编译器撒谎。当你撒谎时,你会遇到麻烦(至少在某些时候)。非常感谢你的解释。非常感谢你的解释。
//mathFunctions.cpp
extern int valueTen;
int addValue(int x){
    valueTen++; //program stops because of this line
    return x + valueTen;
}