2017-01-30 8 views
-5

角括弧は演算子ではないので、私はなぜこのメッセージを受け取っているのか完全には分かりませんが、ここに行きます。演算子[]の一致がありません。C++

私のIntSet.hファイルで、私はこのような特定の関数を宣言しました。

IntSet unions(const IntSet& operand)const;

ファイルはIntSetによって呼び出され、引数として別のIntSetを取り、2セットの和集合を返します。

私のIntSet.cppファイルには、このように見えます。

IntSet IntSet::unions(const IntSet& operand) const 
{ 
    IntSet returnSet(50); 
    for (int i = 0; i < 50; i++){ 
     if (setArray[i] == 1 || operand[i]==1){ 
      if(setArray[i] == 1){ 
       returnSet.addElement(setArray[i]); 
      } 
      else if(operand[i] == 1){ 
       returnSet.addElement(operand[i]); 
      } 
     } 
    } 

    return returnSet; 
} 

エラーはoperand[I] == 1から発生しています。

IntSet.cpp|52|error: no match for 'operator[]' (operand types are 'const IntSet' and 'int')

プログラムは、オーバーライドしてはいけません。私はIntSet unions(const IntSet& operand)const;が提供されたことにも言及しなければならず、変更することもできません。

どのように私はこれを解決する必要がありますか?

+0

std :: setにはconst operator [] overload:user .at()関数がありません。 – zapredelom

+0

IntSet :: operator []は、 'operator []'を呼び出すためにオーバーロードする必要があります。 – songyuanyao

+0

オペレータのオーバーロードはどの形式でも許可されていません。また、クラスメソッドの宣言やパラメータを変更することもできません。 – Podo

答えて

0

IntSetのメンバ変数である、とあなたがIntSetためoperator[]をオーバーロードすることはできません、そしてoperand[i]のあなたのアクセスは、おそらくoperand.setArray[i]でなければなりません。

2

オーバーロード演算子を調べましたが、角括弧は過負荷に見えません。

最も確実です!

あなたのIntSetクラスには、[]ブラケット演算子が含まれていませんが、それを使用していることを示しています。エラーメッセージは正確に言います。あなたの問題があります。

+0

オペレータのオーバーロードはどの形式でも許可されていません:/ – Podo

+1

@JeffreyDilley何ですか?それはまったく意味がありません。あなたはC++をプログラミングしているのですか? –

+0

このコードの制限。これは離散数学コースのために取り組んでいるはるかに大きなプロジェクトの小さな部分です。 – Podo

1

IntSet::operator[](int) constをオーバーロードするには、「忘れた」必要があります。単にあなたのクラス定義にそれを追加します。あなたはどの詳細を提供することができなかったので、私はあなたのクラスIntSetの内臓について推測している

class IntSet { 
    std::unique_ptr<int[]> buffer; 
/* ... */ 
public: 
    int& operator[](int i) { return buffer[i]; } 
    int operator[](int i) const { return buffer[i]; } 
}; 

注意。


タスクで演算子をオーバーロードできない場合は、言語または標準ライブラリで提供されているものを使用する必要があります。上のコードでは、バッファのoperator[]をそのままoperand.buffer[i]のように使用します(メンバー以外からのアクセスが必要な場合はbufferpublicにする必要があります)。 setArrayを想定し

+0

.hファイルと.cppファイル全体を含めるべきかどうか疑問に思っていますか?彼らはかなり長いので、私は情報の重要な部分を投稿したように感じました。このような質問に含めると助けになるものは何ですか? – Podo

+0

問題を再現するために必要な.hと.cppファイルの部分を含める必要があります。これには、必要な最小限のすべての関連クラスの定義を減らすことが含まれます。 – Walter

+0

なぜ公開するのですか?メンバー関数でアクセスできますか? – StoryTeller

関連する問題