![](/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.