7

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));
}
4

1 に答える 1

12

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

参照はポインターではありません。それらは、実際のオブジェクトをスタックに置かずに (「参照渡し」で) 既に逆参照されているポインターと考えてください。

于 2013-03-03T04:19:33.750 に答える