这是一种应该在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。 (直接或间接)在源代码本身中指定。

10-04 20:46