c++生成错误

c++ build error

本文关键字:错误 c++      更新时间:2023-10-16

我正在尝试将wwise集成到一个测试项目中。我在Windows7上有一个使用msvisualstudio2010的项目,这是我在尝试向该项目添加必要的cpp后遇到的错误。我在家里的机器上没有同样的设置,这意味着什么?

------ Build started: Project: wwise test, Configuration: Debug Win32 ------
AkFilePackageLUT.cpp
c:program files (x86)audiokineticwwise v2012.2.1 build 4427sdksamplessoundenginecommonakfilepackagelut.h(204): error C2065: 'NULL' : undeclared identifier
c:program files (x86)audiokineticwwise v2012.2.1 build 4427sdksamplessoundenginecommonakfilepackagelut.cpp(117) : see reference to function template instantiation 'const CAkFilePackageLUT::AkFileEntry<T_FILEID> *CAkFilePackageLUT::LookupFile<AkFileID>(T_FILEID,const CAkFilePackageLUT::FileLUT<T_FILEID> *,bool)' being compiled
with
[
T_FILEID=AkFileID
]
c:program files (x86)audiokineticwwise v2012.2.1 build 4427sdksamplessoundenginecommonakfilepackagelut.h(204): error C2065: 'NULL' : undeclared identifier
c:program files (x86)audiokineticwwise v2012.2.1 build 4427sdksamplessoundenginecommonakfilepackagelut.cpp(140) : see reference to function template instantiation 'const CAkFilePackageLUT::AkFileEntry<T_FILEID> *CAkFilePackageLUT::LookupFile<AkUInt64>(T_FILEID,const CAkFilePackageLUT::FileLUT<T_FILEID> *,bool)' being compiled
with
[
T_FILEID=AkUInt64
]

对我来说,第一眼看上去就像没有指定模板参数。

其他可能的原因:

  • 您使用调试版本的C运行库进行编译,声明for循环中的标准C++库迭代器变量,然后尝试在for的作用域之外使用该迭代器变量环使用的调试版本编译标准C++库代码C运行时意味着/Zc:forScope。请参阅的调试迭代器支持更多信息。

  • 您可能正在调用SDK头文件中的函数当前在您的生成环境中不受支持。

  • 省略必要的包含文件,尤其是在定义VC_EXTRALEAN、WIN32_EAN_AND_MEAN或WIN32_EXTRA_LEAN。这些符号将windows.h和afxvw32.h中的某些头文件排除到快速编译。(在windows.h和afxv_w32.h中查找最新排除内容的描述。)

  • 标识符名称拼写错误。

  • 标识符使用了错误的大小写字母。

  • 字符串常量后缺少右引号。

  • 命名空间范围不正确。解析ANSI C++标准库的步骤函数和运算符,例如,必须指定std带有using指令的命名空间。以下示例未能编译,因为using指令被注释掉,而cout在std命名空间中定义

此错误消息显示以下内容:

在CCD_ 1中存在函数模板的定义。事实上,它是一个类的模板化方法。在该定义内的第204行,使用名称NULLNULL定义在C标准库的头<cstddef>中,通常您可以通过包含许多C/C++头中的一个来包含该定义,因为它们中的大多数都以某种方式包含<cstddef>。但是,akfilepackagelut.h似乎只包含在VS2012安装中使用的头,而不包含该定义,因此编译器不知道NULL的含义。

错误消息的其余部分只是模板错误的胡言乱语,告诉你我们谈论的函数模板已经在AkFilePackageLUT.cpp中的某个地方实例化了两次,告诉你确切的位置和模板参数等等

你能做什么?好吧,如果你不能按照你说的修改源代码(为什么?你源代码),你就什么都不能做,只能为项目提交一个bug。如果可以修改,最好在akfilepackagelut.h中使用#include <cstddef>