这是一种应该在7.1(VS 2003)版本上运行的代码段。
我无法在Visual Studio 2013上对其进行编译。
.h header:
template <HINSTANCE h, DWORD hash, class N>
inline LPVOID testFunc(N n1)
{
...
return ret_func(n1);
}
.cpp:
HINSTANCE kernel32;
int WINAPI WinMain(...)
{
...
kernel32 = GetKernel32();
HINSTANCE mod = testFunc<kernel32, 0x0BADC0DE>("some_string"); // C2975
...
}
错误C2975:“h”:“testFunc”的模板参数无效,预期的编译时常量表达式
我这样尝试过:
HINSTANCE kernel32 = GetKernel32(); // implemented ok
HINSTANCE mod = testFunc<kernel32, 0x0BADC0DE>("some_string"); // C2971
错误C2971:'pushargEx':模板参数'h':'kernel32':局部变量不能用作非类型参数
最佳答案
该错误实际上是不言自明的:
哪个kernel32
不是。
“编译时常数”表示必须在编译时知道该值,即。 e。 (直接或间接)在源代码本身中指定。