-3

このエラーに関連する 6 件のフォーラム スレッドを読みましたが、そのほとんどは文字列宣言によるもので、残りはこの問題とは関係ありませんでした。

このエラーは、入力文字列を受け取り、それを文字列のリストと比較して、近似一致する文字列を返すプログラムで発生します。その簡単な説明が要点であり、実際の実装はもう少しです。

コンパイルして動作するテスト実装では、このコード行を使用しました

Set<Lexicon::CorrectionT> matches = lex.suggestCorrections(line, maxDistance);

Set はクラス (bst クラスを使用) です。私は CS106B コースから再利用しています。Lexicon は、私が書いたコースの別のクラスであり、現在、無関係なプロジェクトに再利用しています。この関数suggestCorrectionsは、文字列lineと編集距離を取得して文字列を比較し、Set候補を返します。

私はこれに行を修正しました

matchSet.corrections = lex.suggestCorrections(matchSet);

CorrectionT内で修正を定義し、前の関数でLexicon::MatchesT matchSet定義matchSetしてから参照として渡すことによって。と MatchesTのフィールドが含まれています。linemaxDistance

私の知る限り、これら 2 行のコードは、使用しているアプローチを除いて同一です。

では、なぜ「エラー C2679: バイナリ '=' : タイプ 'Set' の右側のオペランドを取る演算子が見つかりません」というエラーが発生するのはなぜですか?

4

1 に答える 1

2

私の知る限り、これらの2行のコードは、私が使用しているアプローチを除いて同じです。

いいえ、それらは完全に異なります。Set<Lexicon::CorrectionT>1つは、 ;のコピーコンストラクターを呼び出して、新しいオブジェクトをインスタンス化します。もう1つは、右側のオブジェクトを左側の(作成済みの)オブジェクトにコピーし、代入演算子を呼び出します。これは、何らかの理由で使用できません。

で実装されていSet<>ますか?タイプとは何ですか?matchSet.correctionsリターンタイプはsuggestCorrections何ですか?

于 2012-07-08T20:36:46.920 に答える