在下面的代码模板的错误,我得到的是我没有一个编译错误,如果我删除模板:与相关的名称
template<int DIM> class myClass
{
public :
enum Mode {aa,bb};
myClass(){};
};
template<int DIM> class myClass2
{
myClass2(){};
void myfunc(myClass::Mode m);
};
template<int DIM>
void myClass2<DIM>::myfunc(myClass<DIM>::Mode m)
{
}
TEST.CPP(19):警告C4346:' MyClass的::模式”:依赖名称不是
类型前缀与‘类型名称’指示类型
TEST.CPP(19):错误C2146:语法错误:缺少‘)’前标识符‘M’
如果我删除类似:
template<int DIM>
void myClass2<DIM>::myfunc(myClass::Mode m)
我得到:
TEST.CPP(19):错误C2955: 'MyClass的':使用类模板需要模板参数列表
如果我把myfunc
的定义直接放在类的声明中(我想避免),它的工作原理。
我该怎么做,为什么会发生这种情况?
谢谢
在我看来警告而明确: “前缀'MyClass的 :: Mode'用'typename'”。 –
请您在下一次提问时发现实际的源代码包含错误,而不是像它或它的某个部分。有关如何以及为什么要发布最小的完整示例程序的信息,请参阅http://sscce.org。 –
@Caron:事实上,当你知道它的时候,这似乎很清楚。但是,当你从来没有这样的警告,并且从来没有看到一个代码需要用typename关键字(我的意思是,除了内部模板)声明一个类型名称,这听起来像所有的奇怪的警告,没什么意义....:/ @Rob:好的。 – WhitAngl