这是一种代码片段,应该在大约 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”:局部变量不能用作非类型参数
最佳答案
错误实际上是不言自明的:
expected compile-time constant expression
kernel32
不是。
“编译时常量”表示该值必须在编译时已知,即。 e.在源代码本身中指定(直接或间接)。
关于c++ - C2975 'N' 的无效模板参数,预期的编译时常量表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34704707/