2017-04-22 13 views
0

こんにちは、私はそれは私がこのhppでベクトルを宣言するには?

std::vector<double> a(0); 

のようにしかし、私のファイルで、それは動作しませんしなければならないstd::vector宣言することを知っています。ここに私のコードは次のとおりです。

main.cppに:

#include "test.hpp" 

int main() 
{ 
    Test test; 
    return EXIT_SUCCESS; 
} 

test.hpp:

#ifndef DEF_TEST 
#define DEF_TEST 

#include <iostream> 
#include <vector> 

class Test 
{ 
public: 
    Test(); 
private: 
    std::vector<double> a(0); 
}; 

#endif 

と、これはTEST.CPPです:

#include "test.hpp" 

Test::Test() 
{ 
    a.push_back(2.3); 
    std::cout << a[0] << std::endl; 
} 

そして、コンパイラは私に言いました:

In file included from main.cpp:1:0: 
test.hpp:11:23: error: expected identifier before numeric constant 
std::vector<double> a(0); 
        ^
test.hpp:11:23: error: expected ‘,’ or ‘...’ before numeric constant 
In file included from test.cpp:1:0: 
test.hpp:11:23: error: expected identifier before numeric constant 
std::vector<double> a(0); 
        ^
test.hpp:11:23: error: expected ‘,’ or ‘...’ before numeric constant 
test.cpp: In constructor ‘Test::Test()’: 
test.cpp:5:1: error: ‘((Test*)this)->Test::a’ does not have class type 
a.push_back(2.3); 
^ 
test.cpp:6:17: error: invalid types ‘<unresolved overloaded function type>[int]’ for array subscript 
std::cout << a[0] << std::endl; 

ありがとうございます!

答えて

3

で書いたメソッドを使用するには、次の構文を使用varibleを初期化することができます。

std::vector<double> a(0); 

クラスメンバーのクラス内初期化には使用できません。イン・クラスのメンバを初期化するには、次の構文を使用できます。あなたのクラスのインスタンスが作成されると

std::vector<double> a = {}; 
1

あなたはクラスのメンバとしてのベクトルを初期化するには、次の作業を行う必要があります。

class Test{ 
public: 
    Test(); 
private: 
    std::vector<double> a = std::vector<double>(0); 
}; 

FYI、このコードは冗長である0へのベクトルを、サイズ。あなたは単にstd::vector<double> aと書くことができ、そのサイズは0で始まります。あなたはベクトルは大きnのようにしたい場合は、他の例では、その後、あなたは私がn代わりの0

2

のstd ::ベクトルのメンバーは、デフォルトの初期化子で初期化されます。

あなたはベクトルの初期化子を呼び出したい場合は、明示的にあなたのTest.cppのファイルで、このようにそれを行うことができます。

Test::Test(): 
a(0) { 
    //... 
} 

Psと。これの利点は、クラスのメンバである定数を初期化できることです。

0

は、あなたが(0)あなたの.HPPファイルから削除する必要が

Test::Test() : a(0) 
{ 
    ... 
} 

あなたの建設業者の後に、このための初期化子リストを使用することができます。

4

クラスのメンバー宣言にコンストラクタを使用することはできないようです。クラスのコンストラクタをクラス内で使用するには、そのクラスのコンストラクタで指定する必要があります。

class Test { 
private: 
    vector<double> a; 
public: 
    Test() : a(0) {;} 
}; 
関連する問題