2013-05-01 3 views
2

템플릿을 사용하여 컨테이너를 직접 만드는 작업을하고 있습니다. 내가 사용해야하는 컨테이너는 Smaph라고 불리며, 두 쌍의 숫자를 가져 와서 다양한 기능을 수행합니다. 이 과제에 대한 헤더 파일 만 만들 수 있습니다. 저는 하나의 템플릿 인자를 취하는 단일 링크 된 클래스 슬링크를 만들었습니다.C++ 멤버 함수를 잘못 사용했습니다.()을 잊었습니까?

현재 템플리트에 대한 느낌을 얻고이를 사용하는 방법을 배우려고 노력 중이므로 아주 간단한 예를 들어 당신이 나를 도울 수 있기를 바랍니다. 내 단일 링크 된 목록 클래스에서 내 템플릿에 추가 할 push_back 함수가 있습니다. 어떤 이유에서든 컴파일 타임 오류가 발생하여 멤버 함수의 사용이 잘못되었습니다 (push_back).()을 잊었습니까? 누군가가 왜이 오류가 발생하는지 설명 할 수 있습니까? 감사합니다.

template <typename T> 
class slink { 
    private: 
    struct node { 
    T datum; 
    struct node *next; 
    }; 
    node *head, *tail; 
    public: 
    slink() : head(0), tail(0) { 
    } 

    ~slink() { 
    clear(); 
    } 
    void push_back(const T &datum) { 
    node *p = new node; 
    p->datum = datum; 
    p->next = 0; 
    if (!tail)  
     head = p; 
    else 
     tail->next = p; 
    tail = p; 
    } 

template <typename Tfirst, typename Tsecond> 
class Smaph { 

    public: 
     Smaph(); 
     ~Smaph(); 
     Smaph(const Tfirst a, const Tsecond b) { 
      std::pair<Tfirst, Tsecond> pair1(a, b); 
      s.push_back(pair1); 
     } 
    private: 

     slink<std::pair<Tfirst, Tsecond> > s(); 


}; 

그리고 마지막으로, 나의 주 나의 프로그램을 테스트합니다. 지금 당장하고 싶은 일은이 두 숫자를 내 Smaph를 통해 단일 링크 된 목록에 추가하는 것입니다.

int main() { 
     Smaph<int, double> s(3, 6.3); 
} 
+0

잘못된 라인, 전체 오류 메시지를 게시하는 것이 도움이 될 것입니다. – zneak

+0

[Vexing parse] (http://stackoverflow.com/q/1424510/1084416) 등 –

답변

3
slink<std::pair<Tfirst, Tsecond> > s(); 

는이 인수를하지 않으며 slink<std::pair<Tfirst, Tsecond> >을 반환 s라는 함수의 선언입니다. 컴파일러가 s.push_back(pair1);을 보았을 때, 당신은 그 저조한 기능에 대해 무엇을 하려는지 궁금해합니다. ()이 그것을 데이터 멤버를 만들기 위해 제거

slink<std::pair<Tfirst, Tsecond> > s; 
+0

그러면 함수 호출 전에 생성자에서 s를 초기화해야합니까? –

+0

@AshBurlaczenko 아니요,'s'는 생성자가 시작될 때 자동으로 생성됩니다. –

+0

오케이, 저는 중괄호로 선언하면 슬링크 생성자를 호출 할 것이라고 생각했습니다. 고맙습니다. – user1299379

1

을 당신이 한이 라인에 :이 slink<std::pair<Tfirst, Tsecond> >을 반환 s라는 함수를 선언한다

slink<std::pair<Tfirst, Tsecond> > s(); 

. 당신이 멤버 함수의 잘못된 사용의 이유를 컴파일러 경고, 이는 옳지 않다

s.push_back(pair1); 

:하지만 당신은 당신의 멤버 함수의 내부를했다.

는 수정 매개 변수를 제거하려면 다음

slink<std::pair<Tfirst, Tsecond> > s; 
관련 문제