Почему я не могу создать массив (с++)?
у меня есть следующий код:
#pragma once
class Matrix{
public:
Matrix();
~Matrix();
protected:
float mat[3] = {0.0, 0.0, 0.0};
};
но я получаю ошибку на float mat[3] = {0.0, 0.0, 0.0};
. В нем говорится об ошибке C2059: синтаксическая ошибка: "{"и ошибка C2334: неожиданные маркеры, предшествующие" { " ; пропуск видимого тела функции.
Я правильно создаю массив, не так ли? Тогда в чем проблема?
2 ответов
C++03 не поддерживает встроенную инициализацию полей-членов. Вам нужно переместить эту инициализацию в конструктор, например (ссылка на демо):
class Matrix{
public:
Matrix() : mat({0.0, 0.0, 0.0}) {};
~Matrix();
protected:
float mat[3];
};
вышеизложенное определяет конструктор inline; если вы определяете конструктор отдельно, переместите список инициализации (т. е. код между двоеточием :
и открывающая скобка {
) вместе с определением конструктора.
C++ не поддерживает нестатические инициализаторы элементов данных до тех пор, пока стандарт C++11 не был ратифицирован. Чтобы использовать эту функцию, необходимо иметь компилятор, поддерживающий C++11. Кроме того, он часто отключается по умолчанию, поэтому вам, вероятно, придется включить его вручную. Для GCC укажите std=c++11
. Для Clang, do -std=c++11 -stdlib=libc++
. Если вы используете что-то еще, проверьте документацию.