我有一些c++类,其中很多(不是全部)共享两个"静态大小变量",例如
share.h
/*Other variables in this header used by all classes*/
static size width=10;//Used by about 60%
static size height = 12;//used by about 60%
所以我把它们和所有类共享的其他对象放在一个头文件中。
当我编译项目时,我得到很多警告(来自不使用这些的类),这些警告抱怨它们被定义而没有使用。但我需要他们!
所以我问,是否有一种方法来定义这些,这样不使用这两个变量的类可以使用这个头文件而不会抛出关于它们未被定义的警告?
提前感谢
要么声明它们为const
,要么声明它们为extern
,并在一个源文件中定义它们。编译器应该期望常量被定义(在头文件中)但不被使用,并且不给出警告。
定义不使用的静态变量通常是错误的标志,因此在这种情况下警告是有用的。(如果您确实想要在多个翻译单元中单独地、可修改地复制这些变量,那么您可能应该重新考虑您的程序设计)。
这个警告并没有说它们没有被定义。警告明确表示正在定义它们,但没有使用。也就是说,你要了某样东西,但是你没有使用它。
你真正的问题是这些是static
全局变量。这意味着每个包含头文件的。c或。cpp文件都将拥有该变量的副本。
所以如果你有a.cpp
和b.cpp
,包括share.h
, a.cpp
可以改变width
到20,但b.cpp
不能看到这种变化的效果。这就是编译器发出警告的原因。因为如果您在一个文件中声明了static size width
,而不在那个特定的文件中使用它,那么您当然不能在其他文件中使用它。这是很可疑的行为,定义一个你从不使用的变量。
一般来说,你不应该把全局static
变量放在头文件中。如果你想要常量值,你应该这样声明它们:
const size width=10;//Used by about 60%
const size height = 12;//Used by about 60%
如果你不希望它们是常量,那么你应该用extern
在头文件中声明它们(不初始化它们),然后选择一个 .cpp文件并定义它们(不带extern
,但带值)。如下:
//share.h
extern size width;
extern size height;
//share.cpp
size width = 10;
size height = 12;
您需要使用const限定符,而不是static。静态的意义与你的意图完全不同。你可以在这里找到更多关于静态的信息http://www.cprogramming.com/tutorial/statickeyword.html