标题很拗口,但基本上我写的是这样的:我如何在声明之外为非专业化的非模板类定义方法?
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<>
(我试过并编译过),但是这并不觉得它是正确的(或者如果是这样,我不明白为什么)。
有人可以向我解释我写的是什么问题,为什么改变这似乎工作,以及有什么正确的方法来做到这一点?
我想从第二个代码片段中创建一个类的实例吗?此外,问题不在于它不是会员模板功能。 – skypjack
感谢您注意到丢失的分号(但这只是我在帖子中输入的一个错字,而不是我实际的代码中的东西) – Eternal