タイトルは一口ですが、基本的に私はこのような何かを書いた:非タイプのテンプレートクラスを専門にするために宣言の外にメソッドを定義するにはどうすればよいですか?
enum EnumType{ValA, ValB};
template<EnumType> class A {};
template<>
class A<ValA>
{
private:
double param;
public:
A(double param);
};
template<>
A<ValA>::A(double param)
{
// Do Stuff
}
を、私はそれをコンパイルしようとすると、私が取得:
error: template-id 'A<>' for 'A<(EnumType)0u>::A(double)' does not match any template declaration
私はこの間違っているのでしょうか?
似たようなケースをオンラインで検索した後、私は(これが機能する理由私は理解していないにもかかわらず)template<>
を削除しようとしたが、その後、私は
multiple definition of 'A<(EnumType)0u>::A(double)'
を取得し、私は私がinline
でtemplate<>
を置き換えることができますことを推測(私は試してコンパイルする)、それはそれを行うための適切な方法のように感じません(またはそれは、私はなぜ理解していない)。
誰かが私が書いたことで何が間違っているのか、なぜこれを変えるのがうまくいくのか、それを行う適切な方法は何かを説明できますか?
私は、正確に2番目のスニペットからクラスのインスタンスを作成しますか?さらに、問題はメンバテンプレート関数ではないということではありません。 – skypjack
不足しているセミコロンに気づいてくれてありがとう(しかし、それは私が投稿で作ったばかりのもので、実際のコードではうまくいきませんでした) – Eternal