声明具有静态成员的类是否有任何问题,该成员是标题中的另一个类。 E.g:
class Stat
{
public:
int avar;
Stat();
};
class Test
{
public:
static Stat stat;
};
我担心它可能会导致问题的原因是它似乎非常类似于在标头中声明一个全局变量。如果包含在两个cpp文件中,则会在两个文件中声明全局,从而导致错误。
上面示例中的'stat'仍然需要在两个cpp文件之间只创建一次,与全局相同,那么编译器如何处理一种情况但不处理另一种情况,或者它是不能解决的问题? / p>
答案 0 :(得分:4)
您只是在类本身中声明一个静态类成员变量,您必须在cpp文件中单独定义:
Stat Test::stat;
因此没有编译器或链接器错误。标题中的声明只是引用cpp文件中的定义。
在全局变量术语中,声明等同于:
extern int global;
该定义相当于:
int global;
答案 1 :(得分:4)
答案是你正在声明静态(就像你可以DECLARE一个全局)。 但是你应该只在cpp文件中定义它。
在.h:
extern int myGlobal;
class A
{
static int myStaticMember;
};
在.cpp中:
int myGlobal = 42;
int A::myStaticMember = 42;