2013-03-03 26 views
6

我試圖編譯我的C++代碼時遇到標題中提到的錯誤。我無法理解我在這裏做錯了什麼。編譯錯誤:' - >'的基本操作數具有非指針類型'令牌'

編譯器在執行bool operator==(Token)函數時遇到問題。我認爲這是超載運營商的方式。

任何線索,爲什麼編譯器不喜歡我指 this->terminalthis->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 2013-03-03 04:17:06

+2

請注意,比較運算符的規範聲明是'bool operator ==(const Token&t)const;'(其中我添加了兩個額外的'const'指示)。 – 2013-03-03 04:57:17

+0

@qream如果這回答你的問題,隨時接受答案;) – Qix 2014-10-03 17:34:41

回答

11

仔細看看您的類型。 treferenceToken &t),這意味着它必須使用點運算符(.)引用。

引用不是指針;將它們視爲已經解除引用的指針而不將實際對象放在堆棧上(通過「引用」傳遞)。

+1

感謝QIX的答案。我盯着它一會兒,弄清楚我做錯了什麼。 – qream 2013-03-06 15:27:01

+1

這就是我們在這裏! – Qix 2013-03-07 16:17:08

+0

我想補充一點,如果你有一個指針作爲引用的指針,你仍然用' - >'引用它(例如,如果你有'void ** p;'然後'someFunc(void * &p)',你仍然可以用' - >'來引用它,但將它看作是'void *'。 – Qix 2013-03-18 19:22:56

相關問題