2013-03-03 1 views
6

C++ 코드를 컴파일 할 때 제목에 언급 된 오류가 발생합니다. 내가 여기서 잘못한 것을 이해하는 데 어려움을 겪고있다.컴파일 오류 : '->'의 기본 피연산자에 '토큰'이 아닌 포인터 유형이 있습니다

컴파일러에 bool operator==(Token) 함수를 구현할 때 문제가 있습니다. 나는 이것이 이것이 운전자에게 과부하되는 길이라고 생각했다.

컴파일러가 나를 좋아하지 않는 이유에 대한 단서는 this->terminal 또는 this->lexeme을 말합니다.

class Token { 
    public: 
     tokenType terminal; 
     std::string lexeme; 
     Token *next; 

     Token(); 
     bool operator==(Token &t); 
    private: 
     int lexemelength, line, column; 
}; 

bool Token::operator==(Token &t) { 
    return ((this->terminal == t->terminal) && 
      (this->lexeme == t->lexeme)); 
} 
+1

'이'는 't'만큼이나 중요하지 않습니다. – chris

+2

비교 연산자의 표준 선언은'bool operator == (const Token & t) const;'(여기서 두 개의 추가'const' 표시를 추가했습니다)라는 것에주의하십시오. –

+0

@ qream 질문에 대한 답변을 얻으려면 언제든지 대답을 수락하십시오;) – Qix

답변

11

유형을 자세히 살펴보십시오. treference (Token &t)이므로 점 연산자 (.)를 사용해야합니다.

참조는 포인터가 아닙니다. 스택에 실제 객체를 두지 않고 이미 참조 해제 된 포인터라고 생각하십시오 ("참조로 전달").

+1

답변을 주셔서 감사합니다 Qix. 나는 잠시 동안 그것을 쳐다 보았고 내가 잘못하고있는 것을 알아 냈습니다. – qream

+1

그것이 우리가 여기있는 이유입니다! – Qix

+0

포인터에 참조 포인터가 있으면'->'를 사용하여 포인터를 참조하고 싶습니다 (즉,'void ** p;'가 있고'someFunc (void * & p)', 여전히'->'로 참조 할 것이지만'void * '처럼 취급 할 것입니다. – Qix

관련 문제