У меня есть иерархия классов.Методы этих классов могут создавать временные статические массивы одинакового размера.Я хочу установить размер как static const
поле базового класса.
Я поместил объявление поля в файл с заголовком и инициализировал его в исходном файле.Это работает без проблем при компиляции с использованием GCC 4.3, но не с компилятором VS.
Base.h
class Base
{
public:
virtual void function();
protected:
static const int size;
};
Base.cpp
#include "Base.h"
const int Base::size = 128;
void Base::function()
{
int array[size];
}
Derived.h
#include "Base.h"
class Derived : public Base
{
void function();
};
Derived.cpp
#include "Derived.h"
void Derived::function()
{
int array[size];
}
Main.cpp
#include "Derived.h"
int main()
{
Base* object = new Derived();
object->function();
return 0;
}
Я ожидал, что size
будет инициализирован в Base.cpp и будет считаться const в Derived.cpp.Но это работает только с компилятором GCC.Visual Studio отображает следующие сообщения об ошибках:
ошибка C2131: выражение не оценивается как постоянное
примечание: сбой был вызван непостоянными аргументами или ссылкой на непостоянный символ
примечание: см. Использование 'size'