Per*_*oob 7 c++ oop coding-style
我有很多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%
Run Code Online (Sandbox Code Playgroud)
所以我将它们与所有类共享的其他对象一起放在头文件中.
当我编译项目时,我得到了很多警告(来自不使用这些的类),抱怨它们被定义而不被使用.但我在那里需要它们!
所以我问,有没有办法定义这些,所以不使用这两个变量的类可以使用这个头文件,而不会抛出关于它们没有被定义的警告?
先感谢您
Mik*_*our 13
声明它们const,或者声明它们extern并在一个源文件中定义它们.编译器应该期望定义常量(在头文件中)但不使用,并且不会给出警告.
定义不使用的静态变量通常是错误的标志,因此在这种情况下警告很有用.(如果您确实需要在多个翻译单元中对这些变量进行单独的,可修改的副本,那么您应该重新考虑您的程序设计).
Nic*_*las 10
警告并未说明它们没有被定义.该警告明确指出它们已被定义,但未被使用.也就是说,你问了什么,但后来你没有使用它.
你真正的问题是这些是static全局变量.这意味着包含标头的每个.c或.cpp文件都将拥有该变量的副本.
所以,如果你有a.cpp和b.cpp,其中包括share.h,a.cpp可以改变width20个,但b.cpp 不能看到这种变化的影响.这就是编译器发出警告的原因.因为如果你static size width在一个文件中声明一个,并且不在该特定文件中使用它,那么你肯定无法在其他任何地方使用它.这是可疑的行为,定义一个你从未使用过的变量.
通常,您不应该将全局static变量放在标题中.如果你想要常量值,你应该声明它们:
const size width=10;//Used by about 60%
const size height = 12;//Used by about 60%
Run Code Online (Sandbox Code Playgroud)
如果你不希望它们是常量,那么你应该在一个标题中声明它们extern(没有初始化它们),然后选择一个 .cpp文件并定义它们(没有extern,但带有值).如下:
//share.h
extern size width;
extern size height;
//share.cpp
size width = 10;
size height = 12;
Run Code Online (Sandbox Code Playgroud)