2012-05-31 85 views
2

在一個非常簡化的情況下,我有以下設置,其中,我只是想從類A的函數(單例和實例無關)初始化一個常量靜態成員(類foo)對這個問題):如何使用函數初始化靜態常量成員

class A 
{ 
public: 

    static A instance; 
    A & getInstance() { return instance; } 
    int i(){ return 10;} 
    int j(){ return 20;} 
}; 

class foo { 
public: 

    static const int ii = A::getInstance().i() * A::getInstance().j(); 
}; 
const int foo::ii; 

int main() 
{ 
    foo f; 
    return 1; 
} 

目的是使用上面的函數初始化成員ii。但它會產生以下錯誤:

$ c++ static_constant.cpp 
static_constant.cpp:14:30: error: ‘A::getInstance()’ cannot appear in a constant-expression 
static_constant.cpp:14:42: error: a function call cannot appear in a constant-expression 
static_constant.cpp:14:44: error: ‘.’ cannot appear in a constant-expression 
static_constant.cpp:14:46: error: a function call cannot appear in a constant-expression 
static_constant.cpp:14:53: error: ‘A::getInstance()’ cannot appear in a constant-expression 
static_constant.cpp:14:65: error: a function call cannot appear in a constant-expression 
static_constant.cpp:14:67: error: ‘.’ cannot appear in a constant-expression 
static_constant.cpp:14:69: error: a function call cannot appear in a constant-expression 

請問你能幫我嗎?將欣賞它。

+0

看到這個鏈接上的評論http://stackoverflow.com/ a/407753/720176 – aProgrammer

+0

真的沒有看到downvote的原因。 @anDroider:同樣不要理解,鏈接的評論與這個問題有什麼關係。你可以解釋嗎。 –

+0

我不是DownVoter, – aProgrammer

回答

2

與代碼的幾個問題,但這裏有一個完整的編譯樣本:

class A 
{ 
public: 

    static A instance; 
    static A & getInstance() { return instance; } 
    int i(){ return 10;} 
    int j(){ return 20;} 
}; 

class foo { 
public: 

    static const int ii; 
}; 
const int foo::ii = A::getInstance().i() * A::getInstance().j(); 
A A::instance; 
+0

作爲一個方面說明:1.單身類應該有一個私人構造函數。 2.我所知道的實例化單例對象的推薦方式是** getInstance()方法內部的**:static A&getInstance(){static A theInstance;返回實例; }' –

+1

@ g-makulik更不要說使用單身人士了:) –

2

您正在使用getInstance作爲靜態函數,但未聲明static

變化getInstance聲明:

static A & getInstance() { return instance; } 
相關問題