2012-04-13 4 views
2

を使用して、<<演算子をオーバーライド:は、私は内に含まれているものをプリントアウトして、これらの2つのメソッドを記述する必要が二つの方法

exは(申し訳ありませんが、スペースを節約し、全体を掲示避けるためにしようと、アレイ構成tokenTypeのTKです構造体)

残念ながら、私が言うコンパイルエラー取得しています:[i]のように、それは、< <を上書きしますので、私はこの問題を解決するにはどうすればよい

ââoperatorための一致なし[]âAEXで:エラー2番目の方法は最初の?詳細後

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

。 http://msdn.microsoft.com/en-us/library/1z2f6c2k(v=vs.80).aspx – prelic

+0

私はあなたのコンパイラがゼロから線を引くので、あなたは一つずつ離れていると思います:エラーは1行目ですあなたの「問題はここにある」コメントの上に表示されます。 'expression'は' [] '演算子を定義していますか?実装を表示できますか? – dasblinkenlight

+0

確かに、私は上でそれを編集します。 – rfmas3

答えて

3

を見にoperator[]テイクをオーバーロードすることを学ぶ

。当然、コンパイラは、[]がオーバーロードされていないため、不平を言った。

これは動作するはずです:あなたが `` <<演算子をオーバーロードすることができます

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

ああ、ありがとう!それはそれを修正しました! – rfmas3

1

回答は

あなたは、型の不一致があるので、実際にその後、ex.tokensから保存する必要があります。あなたはこれがoperator<<の問題であるように思わないではない

tk = ex.tokens[i];

次オリジナル回答どれ

を行う必要があります。むしろ、タイプexpressionoperator[]を定義していないようです。あなたはtokens配列を参照するのを忘れて、式自体のインデックスを作成しようとした - あなたは非常に接近しているかOverloading subscripting

+0

私は見る...私はこのプロジェクトのための構造式を含むファイルを編集することはできません – rfmas3

関連する問題