在下面的代碼模板的錯誤,我得到的是我沒有一個編譯錯誤,如果我刪除模板:與相關的名稱
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