2013-03-03 29 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

相关问题