2017-12-14 13 views
-5

私はフランス語で "Individual"というクラスを持っています。コンストラクタC++

そして、私はコンストラクタに問題があります。

individu::individu(int x, int y, std::vector<std::__cxx11::string> map) { 
this->_x = x; 
this->_y = y; 
this->_map = map; 
} 

それは単純なコンストラクタですが、私のコンソールは言う:

'__cxx11': the symbol to the left of a '::' must be a type 
+6

?代わりに 'std :: string'を使用してください – CinCout

+1

なぜ' std :: string'ではなく 'std :: __ cxx11 :: string'を使用していますか? – Holt

+0

よろしくお願いいたします。* __ cxx11 * – Ashwel

答えて

1

標準はstd名前空間内で直接stringクラスを定義します。中間の名前空間はありません(__cxx11など)。したがって

、以下が正しい:

individu::individu(int x, int y, std::vector<std::string> map) 
{ 
    .... 
} 

はさらに一歩これを取ると、あなたはメンバ変数にアクセスするために使用しているthisポインタは冗長です。だから、それらを削除する方が良いです。

また、イニシャライザリストは、コンストラクタ内のメンバ変数の値を初期化するために推奨する必要があります(reason)。

変更されたコードは次のようになります。 `のstd :: __ cxx11 :: STRING`は何

individu::individu(int x, int y, std::vector<std::string> map) : _x(x) 
                   , _y(y) 
                   , _map(map) 
{ 
    // note that the body is now empty! 
} 
+0

1つのライナーを回答するには、イニシャライザーリストの仕組みや、これが必要でないことも示してください... – Klaus

+0

'_map(std ::移動(地図)) '。 – juanchopanza

+0

"コンストラクタのメンバ変数に値を代入するためにイニシャライザリストを使用する必要があります" - false。それらは、コンストラクタ本体の内部に割り当てることができます。 – Yotam