我有以下代码:
#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:'{'之前的意外标记;跳过明显的功能体。
我正确创建数组吗?那么问题是什么?
答案 0 :(得分:11)
C ++ 03不支持成员字段的内联初始化。您需要将此初始化移动到构造函数中,例如(link to a demo):
class Matrix{
public:
Matrix() : mat({0.0, 0.0, 0.0}) {};
~Matrix();
protected:
float mat[3];
};
上面定义了内联构造函数;如果单独定义构造函数,请将初始化列表(即冒号:
和左大括号{
之间的代码)与构造函数定义一起移动。
答案 1 :(得分:7)
在批准C ++ 11标准之前,C ++不支持non-static data member initializers。要使用此功能,您必须具有支持C ++ 11的编译器。此外,它通常默认禁用,因此您可能需要手动启用它。对于GCC,请指定std=c++11
。对于Clang,请-std=c++11 -stdlib=libc++
。如果您使用其他内容,请查看文档。