2013-03-03 14 views
6

C++ kodumu derlemeye çalışırken başlıkta belirtilen hatayı alıyorum. Burada yanlış yaptığımı anlamada sorun yaşıyorum.Derleme hatası: ‘->’ taban işleneni non Token ’işaretçisi değil 12 Token’

Derleyicinin, bool operator==(Token) işlevinin uygulanmasında bir sorun var. Bunun bir operatöre aşırı yüklenmenin yolu olduğunu düşündüm.

Derleyicinin beni neden beğenmediğine dair herhangi bir ipucu this->terminal veya 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

Bu kadar '' '' '' '' '' '' '' '' '' '' '' '' dır. – chris

+2

Karşılaştırma operatörünün standart bildiriminin “bool operator == (const Token & t) const;” (iki ek 'const' endikasyonunu eklediğim) olacağını unutmayın. –

+0

@qream Eğer bu soruya cevap verdiyse, cevabı kabul etmekten çekinmeyin;) – Qix

cevap

11

Türlerinize yakından bakın. t, reference (Token &t) 'dir, yani nokta operatörü (.) kullanılmalıdır.

Kaynaklar işaretçiler değildir; onları, gerçek nesneyi yığına koymadan (daha önce "referans olarak" geçerek) işaretli işaretçiler olarak düşünün.

+1

Cevabınız için teşekkürler Qix. Bir süreliğine ona baktım ve yanlış yaptığım şeyi anladım. – qream

+1

İşte bu yüzden buradayız! – Qix

+0

Bir işaretçiye bir başvuru olarak bir işaretçiniz varsa, buna yine de bir '->' (yani, void ** p; 've sonra' someFunc (void *) değerine sahipseniz bunu eklemelisiniz. & p) ', yine de ona bir' -> 'ile atıfta bulunursunuz, ancak bir" boş "* gibi davranırsınız. – Qix

İlgili konular