2016-09-18 4 views
1

ベクトル宣言「予想パラメータ宣言子」

vector<double> dQdt(3) 

Xcodeでコンパイルした場合、これはエラーになります「と予想パラメータ宣言子を。」私は十分な情報を提供したと思う。私はこの宣言に何か間違っているとは思わない。

答えて

7

あなたは、コンストラクタの初期化子リストで変数を初期化する必要があります。

class X 
{ 
    private: 
    vector<double> dQdt; 
    public: 
    X() : dQdt(3) {} 
}; 
+0

はい。しかし、非初期化の上のコードではありませんか?ベクトル変数dQdtに特定のサイズを割り当てるのはどうですか?それとも、暗黙的に変数を初期化するのでしょうか? – nm17

+1

@ nm17コンパイラはあなたの宣言を関数宣言と混同しています。 – Raman

+0

^^^ AHHHHHHHHHH – nm17

2

データメンバのコンストラクタのパラメータは、あなたのクラスのコンストラクタの初期化子リストで記述する必要があります。あなたは、例えば読めばそれは、代わりの

class Foo { 
    vector<double> dQdt(3); 
}; 

であるあなたは

class Foo { 
public: 
    Foo() : dQdt(3) {} 
private: 
    vector<double> dQdt; 
}; 
0

を書く必要がありますthis member initialization referenceあなたは、デフォルトのメンバー初期化が中括弧または等初期化子でなければならないことを学びます。私。

vector<double> dQdt{3}; 

またはイコール文字使用:これはC++ 11標準で導入されましたので、お使いの環境でそれを有効にする必要が

vector<double> dQdt = std::vector(3); 

をあなたはカーリーブレースを使用するのいずれかが必要です。

+0

技術的には、 "=演算子"ではありません。私はそれが何であるかはわかりませんが、式の演算子ではありません。 –

+0

@MartinBonner私は知っていますが、私は本当にそれをよりよく表現できませんでした。とにかく言い換えた。 –

1

だけでなく、コンストラクタの初期化子リストで初期化など、あなたがブレースの初期化リストで初期化することができます。

class Foo { 
    vector<double> dQdt{3}; 
}; 

エラーの実際のテキストをコンパイラは、関数を宣言するために期待していたされているので、何らかの型の引数をとり、vector<double>を返します。 3は、関数のパラメータの有効な宣言ではありません。

関連する問題