2013-03-03 11 views
6

Otrzymuję błąd wymieniony w tytule podczas próby kompilacji mojego kodu C++. Mam problem ze zrozumieniem, co zrobiłem źle tutaj.Błąd kompilacji: operand podstawowy parametru "->" ma typ wskaźnika "Token"

Kompilator ma problem z moją implementacją funkcji bool operator==(Token). Myślałem, że to jest sposób na przeciążenie operatora.

Jakieś wskazówki, dlaczego kompilator mnie nie lubi, odnosząc się do this->terminal lub 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

To nie tyle "to", ile "t". – chris

+2

Należy zauważyć, że deklaracja kanoniczna operatora porównania to 'operator bool == (const Token & t) const;' (gdzie dodałem dwa dodatkowe znaki 'const'). –

+0

@qream Jeśli to odpowiedziałeś na twoje pytanie, możesz zaakceptować odpowiedź;) – Qix

Odpowiedz

11

Przyjrzyj się bliżej swoim typom. t to reference (Token &t), co oznacza, że ​​musi się do niego odwoływać za pomocą operatora kropki (.).

Odnośniki nie są wskaźnikami; myśl o nich jako o już wyodrębnionych wskaźnikach bez umieszczania rzeczywistego obiektu na stosie (przekazywanie "przez odniesienie").

+1

Dziękuję Qix za odpowiedź. Patrzyłem na to przez chwilę i zorientowałem się, co robię źle. – qream

+1

Po to tu jesteśmy! – Qix

+0

Chciałbym dodać, że jeśli masz wskaźnik do wskaźnika jako referencję, nadal odwołujesz się do niego za pomocą '->' (tzn. Jeśli masz 'void ** p;', a następnie 'someFunc (void *) & p) ', nadal odnosilibyście się do niego z' -> ', ale traktowali to tak, jakby było' void * '. – Qix

Powiązane problemy