2016-10-12 6 views
0

최근에 고전 뱀 게임의 리메이크를 다시 시도했습니다. 이번에는 뱀의 꼬리에 연결된 목록 대신에 deque를 사용했습니다. 꼬리 부분을 만들고 양키 앞쪽에 놓고 이상한 오류가 발생하도록하십시오. 내가 C로 여전히 매우 새로운 오전부터C++ : std :: deque 호출에 대한 일치 함수가 없습니다. <SnakePart> :: emplace_front

no matching function for call to 'std::deque<SnakePart>::emplace_front(<brace-enclosed initializer list>)'|

는 ++ 나는 왜이 오류가 발생하는 등의 단서입니다. 누군가가 내가이 수수께끼를 푸는 것을 도울 수 있으면 고맙겠습니다.

SnakePart.cpp
http://pastebin.com/verR9bpn

Snake.h
http://pastebin.com/XUyNAVKK

완료 및 검증 가능한 최소한의 예 :

#include <deque> 

struct Test { 
    Test(int x, int y) : x(x), y(y){} 
    int x; 
    int y; 
}; 

int main() { 
    int x = 4, y = 5; 

    std::deque<Test> tester; 
    tester.emplace_front({x, y}); 
    return 0; 
} 

SnakePart.cpp

#include "Snake.h" 
#include <deque> 

void SnakePart::advance(int x, int y, bool loose_tail = true) { 
     parts.emplace_front({x, y}); 

     if(loose_tail) 
      parts.pop_back(); 
} 

Snake.h는

#ifndef SNAKE_H_INCLUDED 
#define SNAKE_H_INCLUDED 

#include <deque> 

class SnakeHead { 
private: 
    int posX, posY; 

    // Snake head functions 
    void input(); 
    void movement(); 
}; 

class SnakePart { 
private: 
    std::deque<SnakePart> parts; 

    void advance(int x, int y, bool loose_tail); 
}; 

#endif // SNAKE_H_INCLUDED 
+3

, 소스에 대한 링크를 게시하지 마십시오 복사 - 붙여 넣기를 할 수 그것은 또한 의미 복사 생성자가

tester.emplace_front(x, y); 

를 사용할 수 있음을 의미 두 int 인수를 복용 생성자가 문제의 본문에 직접 들어가는 출처. [좋은 질문을하는 방법에 대해 읽어보십시오] (http://stackoverflow.com/help/how-to-ask) (또한 [최소, 완전하며 검증 가능한 예제] (http : // stackoverflow.com/help/mcve)). –

+0

@ JoachimPileborg 질문에 코드를 추가하겠습니다. –

답변

3

emplace_front 함수는 인수를 사용하여 포함 된 개체의 적절한 생성자로 전달합니다. Test 클래스에는 단일 initializer-list 인수를 취하는 생성자가 없습니다. 그것은 당신이

tester.emplace_front(Test{x, y}); 
+0

빠른 응답을 보내 주셔서 감사합니다 –

1

emplace_front 기능 PARAMS에서 중괄호를 제거합니다. 시멘틱스가 emplace*이면 컨테이너 유형이 T 인 생성자 에서처럼 인수가 전달 된 것을 의미합니다. {}으로 전달하면 인수 유형은 std::initializer_list이됩니다.

+0

C++ 표준 라이브러리의 new_allocator.h 파일에 오류가 발생합니다. –