Как уже упоминалось, вам необходимо инициализировать константные элементы объекта, используя его initializer list:
/* a.h */
class A {
private:
const string cs;
public:
A(const string &value) :
cs(value) // <---- initialize here!.
{};
};
Это то же самое для каждого сопзЬ члена класса:
class A {
private:
const string cs;
const float numberofthebeast;
const char z;
public:
A(const string &value, const float number, const char character) :
cs(value),
numberofthebeast(number),
z(character)
{};
};
Если вы дон Не хотите, чтобы конструктор инициализировал каждое значение, вы можете указать значение по умолчанию в конструкторе по умолчанию, но помните, что после построения вы не можете изменить значение:
class A {
private:
const string cs;
const float numberofthebeast;
const char z;
public:
A(const string &value, const float number, const char character) :
cs(value),
numberofthebeast(number),
z(character)
{};
// Default values!!!
A() :
cs("default ctor"),
numberofthebeast(666.666f),
z('Z')
{};
};
Конструктора список инициализатора также полезно для инициализации других членов, как ссылки O сложных данных, которые не обеспечивают конструктор по умолчанию:
const unsigned float PI = 3.14f;
class Weird
{
Weird (int w);
// no default ctor!
int W;
};
class Foo
{
// Error: weird doesn't provide default ctor,
Weird w;
// Error: reference uninitialized.
float π
};
class Bar
{
Bar() :
// Ok, Weird is constructed correctly.
w(1),
// Ok, pi is initialized.
pi(PI)
{};
Weird w;
float π
};
Если вы можете изменить его после его инициализации, это не будет const. –
Какова большая картина того, что вы пытаетесь достичь? Почему бы просто не использовать метод доступа для ограничения доступа? – RonaldBarzell
В каком смысле 'cs' a * global *? –