通常、クラスに一定のプライベート メンバー変数があり、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 を使用すると、何かメリットがありますか?