0

クラスで非公開にしたい 17 個の整数定数を取得しました。初期化リストを使用する必要は本当にありますか?

ヘッダー ファイルの定数に値を割り当てることができるとどこかで読みましたが、機能していないようです。次のエラー メッセージが表示されます。

sorry, unimplemented: non-static data member initializers
4

2 に答える 2

4

本当に初期化リストを使う必要がありますか?

現代(2011年)のC ++では、違います。古いバージョンの言語では、そうです。

エラーメッセージは、コンパイラが非静的メンバーの新しい初期化構文をまだサポートしていないことをお詫びします。GCCを使用していると仮定すると(そのコンパイラからのエラーを認識しているため)、このページによると、その機能については少なくともバージョン4.7にアップグレードする必要があります。

または、プライベートで定数であるため、クラスからクラスの実装ファイルのローカル名前空間に移動することを検討してください。もちろん、これは、インラインメンバー関数からそれらにアクセスする必要がない場合にのみ機能します。

最後に、それらがクラスのすべてのインスタンスに対して同じ値を持っている場合(おそらく、それらはそうでconstあり、コンストラクター引数とは無関係にそれらを初期化できるため)、それらを宣言できますstatic。次に、宣言で初期化できます(ただし、古いコンパイラでは、整数型の場合にのみ初期化できる場合があります)。ただし、それらがodrで使用されている場合(大まかに言えば、それらへのポインターまたは参照を取得する必要がある場合)、それらは1つのソースファイルで定義する必要もあります。

于 2012-11-20T21:48:55.537 に答える
0

.h:

class MyClass {
    public:
        MyClass();
        ~MyClass();

        int doSomething();

    private:
        const int m_newint = 1;
        const int m_dosomething = 2;
};

.cc:

MyClass::MyClass() {}
MyClass::~MyClass() {}

int MyClass::doSomething() {
    return m_dosomething;
}

有効な C++11 コードです。コンパイラが-std=c++11この機能を使用するように設定されていることを確認してください。

于 2012-11-20T21:21:01.537 に答える