2017-12-14 8 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

'표준 : __ cxx11 :: string' 무엇인가

수정 된 코드는 다음과 같다 것인가? 대신에'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).

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

하나의 라이너를 만들려면 이니셜 라이저 목록이 어떻게 작동하는지 보여주고 또한 this-> 필요하지 않은지 ... – Klaus

+0

'_map (std :: 이동 (지도))'. – juanchopanza

+0

"생성자의 멤버 변수에 값을 할당하려면 이니셜 라이저 목록을 사용해야합니다."- false. 그것들은 생성자 본문 내에 할당 될 수 있습니다. – Yotam