2012-06-11 32 views
2

我想使用靜態const字段,我在類中定義。
當我把它定義這樣的:C++錯誤:不是一個成員或多個定義

class DisjunctionQuery : public Query 
{ 

    public: 
    DisjunctionQuery(); 
    static const std::string prefix; 


}; 
const std::string DisjunctionQuery::prefix = "Or"; 

它說: 'DisjunctionQuery ::前綴' 的多個定義,如果我改變它的方式(除去兩行):

class DisjunctionQuery : public Query 
{ 

    public: 
    DisjunctionQuery(); 
    //static const std::string prefix; 


}; 
//const std::string DisjunctionQuery::prefix = "Or"; 

它說,當我嘗試在另一個地方調用它時,'前綴'不是'DisjunctionQuery'的成員。

我該如何讓它工作? 謝謝。

回答

8

您將定義移至單個實現文件。

如果您將其保留在標題中,您將打破一個定義規則。包含標題的每個文件都將嘗試定義static成員,這是錯誤的。

//DisjunctionQuery.h 
class DisjunctionQuery : public Query 
{ 
    public: 
    //.... 
    static const std::string prefix; 
}; 

//DisjunctionQuery.cpp 
#include "DisjunctionQuery.h" 
const std::string DisjunctionQuery::prefix = "Or"; 
+0

s /將嘗試定義/將嘗試執行/。該定義在類定義之內;多重實施方案就是問題所在。 – cdhowie

+0

@cdhowie不,這只是一個聲明。另外,數據成員沒有實現,只能用於函數。 –

+0

你以爲前者並不包括守衛。 – user1417475