c++ - C2975 'N' 的无效模板参数,预期的编译时常量表达式

标签 c++ templates visual-c++ compiler-errors

这是一种代码片段,应该在大约 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/

相关文章:

c++ - OpenGL 在已经绑定(bind)时绑定(bind)

c++ - 什么是无约束转换运算符模板,它有什么用?

c++ - 将比较器传递给声明为类成员的 priority_queue

c++ - 如何在派生类型的容器与基类型的容器之间进行转换

C goto 跨越初始化,MinGW-W64 vs MSVC++

windows - cpprestsdk SSL post 不适用于 Windows7 但适用于 Windows 10

c++ - Eigen 创建超/次对角矩阵

c++ - 为什么我的圆柱模型不能在 Z 轴上旋转?

c++ - 获取具有通用返回类型的函数

c++ - 可以在 C++ 中的字符串文字中写入 unicode 字符吗