![](/img/trans.png)
[英]C++ template class with static member - Undefined reference, whereas my static member seems declared and initialized
[英]C++ class declared as static class member
用静态成员声明一个类是否存在任何问题,该成员是标头中的另一个类。 例如:
class Stat
{
public:
int avar;
Stat();
};
class Test
{
public:
static Stat stat;
};
我担心它可能导致问题的原因是,这似乎与在标头中声明全局变量非常相似。 如果包含在两个cpp文件中,则在两个文件中声明全局变量都会导致错误。
上面的示例中的“ stat”仍然只需要在两个与全局相同的cpp文件之间创建一次,那么编译器如何处理一种情况,却不能处理另一种情况,或者答案不能呢?
您只需要在类本身中声明静态类成员变量,就必须在cpp文件中单独定义它:
Stat Test::stat;
因此,没有编译器或链接器错误。 标头中的声明仅引用cpp文件中的定义。
用全局变量术语,该声明等效于:
extern int global;
并且定义等同于:
int global;
答案是您要声明静态变量(就像可以声明全局变量一样)。 但是您只能在cpp文件中定义它。
在.h中:
extern int myGlobal;
class A
{
static int myStaticMember;
};
在.cpp中:
int myGlobal = 42;
int A::myStaticMember = 42;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.