error C2998: 'XXXXXXX' : cannot be a template definition
字面意義是「XXXXXXX 不能作為模板定義」,但編譯器不給具體原因。
絕大多數情況下,是因為模板參數中使用的類型未聲明/未包含頭文件,導致編譯器無法識別該類型,從而誤判為模板定義非法。
// 缺少 MyStruct 定義或未 #include "MyStruct.h"
template<typename T>
BOOL Func(T &t_value, MyStruct &st); // 報 C2998
同理,若參數用到 STL 容器(如 std::vector)但未 #include <vector> 或缺 using namespace std;,也會觸發此錯誤。
#include(注意大小寫、路徑)。using 或全限定名。C2998 往往是「類型找不到」的偽裝。補全聲明/頭文件即可消除,無需修改模板語法本身。