2017-07-27 4 views
-1

を与えます。 私は、.cppファイル内の関数の行に次のエラーを取得:私は解決策のためのWebを検索していると私はtemplateキーワードがoperator<< <UIDCategory::GoodType>(goodRatio.goodType)への呼び出しに必要であることが判明は、私は次のコードを持っているエラー

Rules.cpp(21): error C2677: binary '<': no global operator found which takes type 'UIDCategory' (or there is no acceptable conversion) 

operator<<が実際にテンプレートであることを示していますので、私はそれを追加しましたが、エラーは消えません。私はここで間違って何をしていますか?

ここで考えているのは、typedefが新しい型を導入しないため、過負荷解決に使用できないという制限を回避することです。私は単純に次の過負荷を導入したときに問題に遭遇しました:std::ostream& operator<<(std::ostream& str, const GoodType& goodType)。このヘッダーはstd::ostream& operator<<(std::ostream& str, const unsigned short& goodType)と同等であるため、str << aGoodTypeはあいまいです(stdのものと衝突します)。

私のコードは、明示的に< <オペレータの「オーバーロード」は< <演算子のオーバーロードテンプレートを作成して、明示的にUIDCategoryの異なるメンバーのためにそれを専門とすることにより、使用するものを述べるためにユーザーを有効にする試みであります。

エラーと私が達成しようとしていることの両方について助けていただければ幸いです。

+1

[MCVE]を提供する必要があります。 – Jonas

答えて

1

Jonasが提案したように私のMinimal、Complete、Verifiableの例を作成しているうちに、私は実際にこの問題を解決しました。問題は、私が< <オペレータの誤った呼び出し規約を使用していたことでした。 ストリームのメンバーであるかのように呼びました。 str.template operator<< <UIDCategory::GoodType>(goodRatio.goodType)の代わりにoperator<<<UIDCategory::GoodType>(str, goodRatio.goodType)にする必要があります。

また、これは私が達成しようとしていたものの巻き返しの方法であり、いくつかの小さな欠点を持つより簡単な方法を選択したと決めました。

関連する問題