2013-03-03 9 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;'(2つの追加の 'const'指示を追加したもの)です。 –

+0

@ qreamこれがあなたの質問に答えた場合は、答えを受け入れること自由に感じて;) – Qix

答えて

11

あなたのタイプをよく見てください。 treferenceToken &t)です。つまり、ドット演算子(.)を使用して参照する必要があります。

参考文献はポインタではありません。実際のオブジェクトをスタックに置かずに(参照によって渡すことで)すでにデリファレンスされたポインタと考えることができます。

+1

答えに感謝Qix。私はしばらくそれを見つめ、私が間違っていたことを理解しました。 – qream

+1

これは私たちがここにいるのです! – Qix

+0

ポインタを参照するポインタを参照として持っていても ' - >'を参照しています(つまり 'void ** p;'と 'someFunc(void * &p) 'では、' - > 'でそれを参照しますが、' void * 'のように扱います。 – Qix

関連する問題