"Cannot declare member function ...to have static linkage"解決辦法

如果您在.cc文件中聲明瞭一個靜態方法。

原因是static在.cc文件中的含義與類聲明中的有所不同。這確實很愚蠢,但是關鍵字static具有三種不同的含義。在.cc文件中,static關鍵字表示該功能對於該特定文件之外的任何代碼均不可見。

這意味着您不應該在.cc文件中使用static來定義每個類的方法和變量。幸運的是,您不需要它。在C ++中,不允許使用與實例變量或實例方法同名的靜態變量或靜態方法。因此,如果您在類聲明中將變量或方法聲明爲static,則在定義中不需要static關鍵字。編譯器仍然知道變量/方法是類的一部分,而不是實例的一部分。


錯誤用法示例:

 在頭文件FOO.h:

class FOO
{
   public:
     static int func();
};

在cc文件FOO.cc:

static int FOO::func()
{
   /* code */
}

正確用法示例1:

 在頭文件FOO.h:

class FOO
{
   public:
     static int func();
};

在cc文件FOO.cc:

int FOO::func()
{
   /* code */
}


正確用法示例2:

 在頭文件FOO.h:

class FOO
{
   public:
     static int func()
     {
       /* code */
     }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章