17

通常、クラスに一定のプライベート メンバー変数があり、getter のみがあり、setter がない場合、次のようになります。

// Example.h
class Example {
    public:
        Example(const int value);
        const int getValue() const;
    private:
        const int m_value;
};


// Example.cpp
#include "Example.h"

Example::Example(const int value)
: m_value(value)
{
}

const int Example::getValue() const
{
    return m_value;
}

今私がやろうとしているのは、そのような定数のintメンバー変数を持つことですが、初期化セクションでそれを定義する代わりに: m_value(value)、他のオブジェクトを取得する必要があります-この例ではベクトルを使用します-コンストラクターのパラメーター、およびパラメーター オブジェクトに基づいて m_value を設定します。この場合、サイズが 0 より大きい場合は、ベクトルのサイズ + 1 を実行しようとします。

Example::Example(std::vector<Example*> myVec)
{
    if (myVec.size()) {
        m_value = myVec.size() + 1;
    }
    else {
        m_value = -1;
    }
}

しかし、エラーが発生uninitialized member 'Example::m_value' with 'const' type 'const int'し、初期化セクション内で m_value を初期化するassignment of read-only data-member 'Example::m_value'と、すべて意味のあるエラーが発生します。これらのエラーが発生するはずですが、どうすればそれらを回避できますか?

編集:私が編集できる唯一の方法m_valueは、オブジェクト自体の内部です(m_valueはプライベートであるため)。ゲッターしかないと、 m_value をコンストラクターで設定されたもの以外に設定することが制限されます。メンバー変数として定数 int を使用すると、何かメリットがありますか?

4

4 に答える 4