検索は実行しましたが、クエリに一致するものは見つかりませんでした。1つのテンプレートクラスから別のテンプレートクラスへの変換演算子
テンプレートクラス(Vector2、Vector3、Vector4)があります。
エラーC2833:Visual Studioの2017を使用して2および4に3と4、 とのVector3にベクトル2から変換演算子を定義しようと など
template <typename T> class Vector4 { // ... operator Vector2<T>() const { return { x, y }; } operator Vector3<T>() const { return { x, y, z }; } // ... T x, y, z, w; // ... } template <typename T> class Vector3 { // ... operator Vector2<T>() const { return { x, y }; } operator Vector4<T>() const { return { x, y, z, 0 }; } // ... T x, y, z; // ... } template <typename T> class Vector2 { // ... operator Vector3<T>() const { return { x, y, 0 }; } operator Vector4<T>() const { return { x, y, 0, 0 }; } // ... T x, y; // ... }
は私にこれを提供します「演算子をVector2 'は認識されていない演算子またはタイプではありません
すべて、すべての援助をいただきありがとうございます。
ありがとうございます。
編集:実際のソースには、クラス定義の後にセミコロンがあります。私が投稿した簡単なバージョンにそれらを入れるのを忘れてしまった。 はまた、はい、多くのエラーがあったが、私の経験では、それは通常 が宣言前進しようとした重要な最初のものです:
template <class T> class Vector 3;
template <class T> class Vector 4;
template <typename T>
class Vector2 {
// ...
}
編集:今、私は取得エラーC2988:認識できないテンプレート宣言/定義。おそらく、3つのテンプレートクラスが別々のファイルにあることに言及する価値はあります。私はもともとタイプ変換演算子を働かせるためにただ1つのクラスにヘッダを含めようとしましたが、これはオリジナルのエラーを与えていたものです。
ああ、はい。私は間違いなくそれらを明示的にしています。それは常に良いアドバイスです。しかし0430のローカルタイムでした。:)
編集:Nevermind、私はspazです。私はVectorとdimsの数の間にどのようにスペースを入れたのかわかりません "Vector 2"!= "Vector2"。フォワード宣言はそれでした。私はとても簡単なことを逃したとは信じられません。 子供たち:あなたが結ばれたときには、コードはしないでください。
あなたはこれらの演算子を宣言する検討する必要があります[ '明示的]](http://en.cppreference.com/w/cpp/language/explicit)。 –
それだけではなく、もっと多くのエラーメッセージが表示されるはずです。私はあなたが少なくとも10を得るべきであることがわかります...クラス定義をセミコロンで閉じます。コンパイラは宣言される前に型を認識できません。 –