有一个名为 BOT_TIME
的变量,它随游戏的难度而变化,因此不是 const
。有很多文件使用它。我打算将它用作全局变量。
1) 在 constants.h
中,我声明它 extern int BOT_TIME
。
在 constants.cpp
中,我声明它 extern int BOT_TIME
。
BUILD => 在所有源中对变量的 undefined reference (是的,我已经包含了 header )。
2) 在 constants.h
中,我将其声明为 int BOT_TIME
。
在 constants.cpp
中,我将其声明为 int BOT_TIME
。
由于 non-consts
默认为 extern
,因此我决定保留该关键字。
BUILD => 变量的多重定义(显示在包含constants.h的每个源文件中)
3) 在 constants.h
中,我声明它 extern int BOT_TIME
。
在 constants.cpp
中,我将其声明为 int BOT_TIME
。
这有效。
问题出在哪里?
将变量初始化为 constants.cpp
中的内容使其适用于情况 1 和 3。
这是怎么回事? 哪种方法是正确的?
最佳答案
您可以根据需要多次声明变量,但可以而且必须只定义一次。
extern int BOT_TIME;
是一个声明。
int BOT_TIME;
是一个定义。
定义必须出现在单个实现文件中。
Since non-consts are by default extern , I decided to leave that keyword.
不。你怎么想到的?
回答问题:
1) 没有定义,只有声明。
2) 这个假设是错误的。您多次定义该符号。
3)它之所以有效,是因为这是正确的方法。
来自评论:
当你用extern
声明一个变量时,你指定它具有外部链接,是的,但你只声明它,而不定义它。如果您不使用 extern
关键字,它仍然具有外部链接,但它也是一个定义。
关于c++ - 在全局变量的 header 和源中使用 "extern int x"中的 extern 关键字是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12455467/