Почему я не могу создать массив (с++)?

у меня есть следующий код:

#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++. Если вы используете что-то еще, проверьте документацию.