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};。エラー C2059: 構文エラー: '{' およびエラー C2334: '{' の前に予期しないトークンがあります。明らかな関数本体をスキップします。

私は配列を正しく作成していますか?それでは何が問題なのですか?

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++ は、C++11 標準が承認されるまで、非静的データ メンバー初期化子をサポートしていませんでした。この機能を使用するには、C++11 をサポートするコンパイラが必要です。また、デフォルトでは無効になっていることが多いため、手動で有効にする必要があります。GCC の場合は、 を指定しますstd=c++11。Clang の場合は、-std=c++11 -stdlib=libc++. 他のものを使用する場合は、ドキュメントを確認してください。

于 2013-03-05T18:38:07.723 に答える