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

手伝ってくれませんか。感謝します。

4

2 に答える 2

2

getInstance静的関数として使用していますが、宣言されていませんstatic

の宣言を変更しgetInstanceます:

static A & getInstance() { return instance; }
于 2012-05-31T09:50:12.550 に答える
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;
于 2012-05-31T09:52:07.593 に答える