6

我有以下代码:

#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};. 它说 Error C2059: syntax error : '{' and error C2334: unexpected token(s) before '{'; 跳过明显的函数体。

我正确地创建了数组不是我吗?那有什么问题呢?

4

2 回答 2

11

C++03 不支持成员字段的内联初始化。您需要将此初始化移动到构造函数中,例如(链接到演示):

class Matrix{
public:
    Matrix() : mat({0.0, 0.0, 0.0}) {};
    ~Matrix();

protected:
    float mat[3];
};

上面定义了内联的构造函数;如果您单独定义构造函数,请将初始化列表(即冒号:和左大括号之间的代码{)与构造函数定义一起移动。

于 2013-03-05T18:33:25.807 回答
7

在 C++11 标准被批准之前,C++不支持非静态数据成员初始化器。为了使用这个特性,你必须有一个支持 C++11 的编译器。此外,它通常默认禁用,因此您可能需要手动启用它。对于 GCC,指定std=c++11. 对于 Clang,执行-std=c++11 -stdlib=libc++. 如果您使用其他东西,请查看文档。

于 2013-03-05T18:38:07.723 回答