У меня есть класс, который содержит член, который является вектором с плавающей запятой и должен быть доступен для всех объектов класса. Размер члена не будет известен до времени выполнения, и я не могу понять, как установить размер вектора.
Моя первая попытка состояла в том, чтобы попытаться установить размер в конструкторе, но это просто память все перепутала. numScores – количество создаваемых оценок, известное только во время выполнения.
class Window
{
public:
Window ();
private:
vector<float> mScores;
};
vector<float> Window::mScores;
Window::Window ()
{
mScores.resize (numScores);
}
Я попытался установить размер в разделе инициализации члена конструктора:
class Window
{
public:
Window ()
private:
vector<float> mScores;
}
vector<float> Window::mScores;
Window::Window ()
: mScores (numScores)
{
}
и получил следующую ошибку "'std::vector<float, std::allocator<float> > Window::mScore' is a static data member; it can only be initialized at its definition"
Итак, я переместил настройку размера туда, где определяется mScores:
class Window
{
public:
Window ()
private:
vector<float> mScores;
}
vector<float> Window::mScores (numScores);
Window::Window ()
{
}
Это скомпилировалось нормально, но когда я запустил свою программу и посмотрел на Window::mScores, размер был равен 0.
Я пытался отследить эту проблему в течение нескольких недель и, наконец, сегодня понял, в чем проблема, но понятия не имею, как ее исправить. Было бы легко, если бы numScores был известен во время компиляции, но, к сожалению, это не так.
Есть ли какой-нибудь шаблон проектирования или библиотека, похожая на повышение, в которой было бы что-то, на что я мог бы сослаться, чтобы понять это?
Любая помощь будет принята с благодарностью!
Изменить. Спасибо за каждый вклад. Как я упомянул ниже, я совершил ошибку, когда скопировал класс Window с компьютера, на котором фактически находится код, и объединил его, вырезав и вставив класс в другие примеры.
С учетом сказанного получается, что статическое поле мне не нужно. Я занимаюсь переводом FORTRAN (или Fogeytran, как я начал его называть) на C++ и очень запутался в том, как используется поле mScores. Как только я понял, что он не распределяется между объектами Windows, все встало на свои места и теперь работает нормально.
Еще раз, еще раз спасибо за информацию.