VS2015 - "F"的匹配错误:非类型模板参数"F"的非法类型

  • 本文关键字:类型 非法 参数 错误 VS2015 c++
  • 更新时间 :
  • 英文 :


我们正在从VS2005迁移到VS2015,相同的代码在VS2005中编译得很好,但在VS2015中抛出一个错误"'F':非类型模板参数'F'的非法类型"

#define DLLEXPORT __declspec (dllexport)
template <class DLLEXPORT F> class DLLEXPORT QWCalloutManager {
};
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

有什么帮助吗??

您需要重写为:

#define DLLEXPORT __declspec (dllexport)
template <class F> class DLLEXPORT QWCalloutManager {
};
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

没有办法说F必须是一个导出类(除非你可以为它写一个静态断言)。你只需要在代码审查中检查它。

也许vs2005没有抱怨,但template <class __declspec (dllexport) F> class ...不是有效的msvc++语法。

尝试从模板参数中删除DLLEXPORT

#define DLLEXPORT __declspec (dllexport)
template <class F> class DLLEXPORT QWCalloutManager {
};

最新更新