繁体   English   中英

C ++类声明为静态类成员

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM