2012-03-18 14 views
0

エラーの前に期待される修飾されていない-idが:C++:演算子のオーバーロードのエラー: '&' トークン

g++ -Wall -Wextra -ansi -pedantic Testr.cc classE.cc classC.cc 
classE.cc:46:14: error: expected unqualified-id before '&'token 
classC.cc:46:14: error: expected unqualified-id before '&'token 

ラインコンパイラが参照している:コンパイラは話している

classE classE::&operator%(classB &rhs){ 

" 'classE :: &演算子%'式の「&」;私はすぐにアンパサンドを削除したいと思いますが、割り当て(yay任意の宿題ガイドライン)に必要です。私は、アンパサンドが何をすべきかもはっきりしていません。同様の演算子オーバーロードメソッドは問題なく同じアウトラインを使用し、私はGoogleと教科書を使って空の手を出す。

引数で派生クラス(classB.hが純粋仮想です)を指定しても、これらのエラーはクリアされません。

同様に定義された他の演算子も問題なく動作するため、問題は実装にあると考えられます。基本的な考え方は、2つのclassB由来のオブジェクト(classCまたはclassE)を取り、それぞれのオブジェクトに含まれる文字列変数をインターリーブして、織り込まれた文字列を含むlhsタイプのオブジェクトを返すことです。 classEの実装は、実質的にclassCの実装とまったく同じです。

classC classC::&operator%(classB &rhs){ //Interleave two classB-derived objects, return object of lhs-type 
    string temp = rhs.str(), temp2 = restore(), result = ""; 
    int a = temp.size(), b = temp2.size(), max; 
    if (temp2.size() > temp.size()){ 
     max = temp2; 
    } 
    else{ 
     max = temp; 
    } 
    for (int i = 0; i < max; i++){ 
     if (i < a){ 
     result += temp2[i]; 
     } 
     if (i < b){ 
    result += temp[i]; 
    } 
} 
return classC(result); 
} 

申し訳ありませんが、私はここで全く新しいです。コードブロックに行番号を追加する方法がわかりません= - \

問題を読んでいただきありがとうございます。 = - )

編集:私は恥ずかしい愚かなミスであると恐れていました。行数を classE & classE :: operator%(classB & rhs){ }に変更すると、数多くの新しいエラーが発生しました。 Heh、ちょうど私がC++のハングを取得していると思ったとき。ありがとう、みんな。私はすべての私の将来の質問が簡単であることを願っています。

答えて

2
classE classE::&operator%(classB &rhs) 

構文的には有効ではありません。


あなたが%演算子をオーバーロードしている場合に必要なものは次のとおりです。あなたの意図は、参照を返すことです

classE classE::operator%(classB &rhs) 

場合は、次のものが必要です:

classE& classE::operator%(classB &rhs) 
    ^ ^^^^^
     |  | | | | | 
     |  | | | | | 
    return type | | keyword| function arguments 
       | |  | 
      class name operator being overloaded 
        | 
       Scope resolution operator 
0

あなたがいるようですclassE classE::&operator%(classB &rhs);という署名が有効なC++コードではないため、実装を記述する際に間違いを犯した。宣言はclassEにこのようなものです:

classE &operator%(classB & rhs); 

これはclassE &の戻り値の型を持っているoperator %を宣言します。あなたはとても実装が実際に

classE & classE::operator%(classB &rhs){ 
のようになります。それがより明確に

classE& operator%(classB & rhs); 

としてそれを書くために見つけるかもしれません

関連する問題