簡體   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