2012-04-13 6 views
2

Ich habe diese beiden Methoden schreiben, was zum Ausdrucken enthalten ist innerhalb von:Aufschalten der Operator << mit zwei Methoden

ex ist ein Array zusammengesetzt Tokentype tk (sorry, versuchen, um Platz zu sparen und vermeiden Sie die ganze Posting structs)

Leider bin ich einen Compiler-Fehler erhalten, der sagt: Fehler: keine Übereinstimmung für âoperator [] â in AEX [i] â

Wie kann ich dieses Problem beheben, so wird es < < außer Kraft setzen, so dass Die zweite Methode verwendet die erste?

ostream & operator<< (ostream & os , const tokenType & tk) 
{ 
    switch (tk.category) 
    { 
      case TKN_OPRAND: 
      os << tk.operand; 
      break; 
      case TKN_OPRTOR: 
      os << tk.symbol; 
      break;    
    } 
    return os; 
} 

ostream & operator<< (ostream & os , const expression & ex) 
{ 
    tokenType tk; 

    for (int i = 0; i < ex.numTokens; i++) 
    { 
     tk = ex[i]; 
     os << tk.operand << " "; //problem line is this one 
    } 
    return os; 
} 

struct expression 
{ 
    int numTokens ; 
    tokenType tokens[MAX_TOKENS_IN_EXPRESSION] ; 
    void print() const ; 
    int toPostfix(expression & pfx) const ; 
    int evalPostfix(int & val) ; 
    expression() { numTokens = 0 ; } ; // default constructor 
} ; 
+0

Sie die '' << Betreiber überlasten. http://msdn.microsoft.com/en-us/library/1z2f6c2k(v=vs.80).aspx – prelic

+0

Ich denke, Ihr Compiler nummeriert Zeilen von Null, so dass Sie um eins sind: der Fehler ist in der Zeile eins oben von Ihrem "Problem ist hier" Kommentar. Definiert 'expression' den' [] 'Operator? Können Sie die Implementierung zeigen? – dasblinkenlight

+0

Sicher, ich werde es oben bearbeiten. – rfmas3

Antwort

3

Sie sind ganz in der Nähe - Indizierung der Ausdruck selbst Sie haben vergessen, die tokens Array und versuchte zu verweisen. Natürlich reklamiert der Compiler, weil Sie kein [] überladen haben.

sollte diese Arbeit:

for (int i = 0; i < ex.numTokens; i++) 
{ 
    tk = ex.tokens[i]; // <<==== Here is the fix 
    os << tk.operand << " "; 
} 
+0

Oh ok, danke! Das hat es behoben! – rfmas3

1

Antwort nach zusätzlichen Details

Sie müssen speichern tatsächlich von dem ex.tokens dann, da es eine Typenkonflikt ist. Sie müssen die folgenden

tk = ex.tokens[i];

Original-Antwort

Das ist nicht nicht zu tun scheint ein Problem mit operator<< zu sein. Eher scheint es, dass Ihr Typ expressionoperator[] nicht definiert.

Um zu erfahren, wie operator[] nehmen zu sehen, um eine Überlastung bei Overloading subscripting

+0

Ich sehe ... Ich bin nicht erlaubt, die Datei zu bearbeiten, die Strukturausdruck für dieses Projekt enthält, aber – rfmas3