私はC++の奇妙なバージョンに住んでいるに違いありません。私のコードのセクションには、次のものがあります。
TemplateIterator<sf::Sound> Temp;
TemplateIteratorNonConst<sf::Sound> Temp2 = Temp;
TemplateIteratorNonConstは現在、TemplateIteratorと何ら変わらないため、「constness」の命名規則は無視してください。エラーが発生します:
'TL::TemplateIterator<sf::Sound>' to non-scalar type 'TL::TemplateIteratorNonConst<sf::Sound>' requested
これは、C++に変換の問題があることを意味します。気が遠くなるような事実は、TemplateIteratorNonConstは空のサブ派生物であり、TemplateIterator[1]の正確な複製です。
//Empty to demonstrate the absurdity of the error
template<typename TemplateItem>
class TemplateIteratorNonConst : public TemplateIterator<TemplateItem>
{
private:
protected:
public:
};
代入演算子を定義しても(テンプレートIteratorからNonConsts、またはその逆、同じ場合など)、違いはなく、同じエラーが発生します。次の事実がなければ、それほど紛らわしいエラーにはなりません。
TemplateIterator<sf::Sound> Temp;
TemplateList<sf::Sound> Temp2 = Temp; //A sub-class of TemplateIterator
エラーはまったく発生しません。なぜ、TemplateIteratorのサブクラスであるTemplateListは、まったく同じシナリオで「非スカラー型」の警告を受け取らないのに、TemplateIteratorのサブクラス(および正確な複製)でもあるTemplateIteratorNonConstは受け取るのですか?
このページのTemplateIteratorとTemplateListの両方の長さのため、完全なコード例を示すことはできません。また、単純なクラスでエラーを再現できませんでした(正確に重複するサブクラスは、どちらの方法でも割り当てを実行するときにエラーを発生させません)。
なぜこのエラーが発生し、静的な型キャストがないのですか(TemplateListが機能するために型キャストを必要とせず、TemplateIteratorNonConstはTemplateIteratorの自明の複製であるため、必要ないはずです)どうすれば問題を修正できますか?
(静的型キャストは、下にあるより大きな問題を隠蔽していると感じているので、むしろそれに対処したいと思います)。
[1]さて、衒学者の「正確な」複製(TemplatorIteratorのサブクラス)ではないかもしれませんが、あなたは私が何を意味するか知っています。