2017-04-02 5 views
-2

Ich habe einen Operator, der die Adresse einer nicht änderbaren Zeichenkette erhält. Ich versuche, die Größe der empfangenen Adresse mit dem Artikel sku zu vergleichen. Wenn sie gleich sind, gebe ich wahr, wenn nicht falsch zurück. Ich erhalte eine Fehlermeldung auf c.size(), die der Ausdruck sagt müssen einen Klassentyp haben, und ich bin mir nicht sicher, warumAusdruck Muss einen Klassentyp (Operator) haben

char Item::operator==(const char* c) 
{ 
    if (this->get_sku.size() == c.size()) //Error 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

// Getter Funktion

char Item::get_sku() const 
{ 
    return *m_sku; 
} 
+2

Woran denken Sie, dass Zeiger eine size() -Memberfunktion haben? Und warum arbeitest du überhaupt mit Charakterzeigern? –

+0

Der Lehrer hat angegeben, dass ich Char-Zeiger verwenden muss –

+0

Holen Sie sich einen besseren Lehrer. Wenn Sie die Länge einer C-artigen Zeichenfolge suchen müssen, auf die ein Zeichenzeiger zeigt, verwenden Sie strlen(), aber das funktioniert nicht als Gleichheitsoperation - "foo" und "bar" haben die gleiche Länge, sind aber nicht gleich. –

Antwort

0

Ich bin nicht Sicher, was du erreichen willst. Aber da get_sku eine einzige char zurückgibt, macht es nicht viel Sinn, seine Länge abzufragen oder sie mit einer char* in irgendeiner Weise zu vergleichen. Die folgenden kompilieren, aber ich bin mir nicht sicher, was Ihr genaues Problem ist.

class Item 
{ 
public: 
    bool operator==(char c) const; 
    char get_sku() const; 
private: 
    char * m_sku; 
}; 

bool Item::operator==(char c) const 
{ 
    return this->get_sku() == c; 
} 

char Item::get_sku() const 
{ 
    return *m_sku; 
} 
Verwandte Themen