Я хочу инициализировать константу в классе child вместо базового класса. И используйте его, чтобы избавиться от динамического распределения памяти (я уже знаю размеры массива, и будет несколько дочерних классов с разными константами).
Так что я стараюсь:Константы инициализации C++ и наследование
class A {
public:
const int x;
A() : x(0) {}
A(int x) : x(x) {}
void f() {
double y[this->x];
}
};
class B : A {
B() : A(2) {}
};
Довольно простой, но компилятор говорит:
ошибка C2057: ожидается постоянное выражение
Как я могу сказать компилятору, что это действительно постоянная?
Это не постоянное выражение, если его значение определено во время выполнения. Подумайте об этом так: постоянное выражение постоянное, что означает, что размер массива будет постоянным во всех A. Тем не менее, вам нужны разные размеры по A. Разный размер -> Не постоянный. – GManNickG