我正在尝试将wwise集成到测试项目中。我使用ms visual studio 2010在Windows 7上有一个项目,这是我尝试添加一个necassary cpp到项目后得到的错误。我在家里的机器上使用相同的设置不会出现这个构建错误,这是什么意思?
------ Build started: Project: wwise test, Configuration: Debug Win32 ------
AkFilePackageLUT.cpp
c:\program files (x86)\audiokinetic\wwise v2012.2.1 build 4427\sdk\samples\soundengine\common\akfilepackagelut.h(204): error C2065: 'NULL' : undeclared identifier
c:\program files (x86)\audiokinetic\wwise v2012.2.1 build 4427\sdk\samples\soundengine\common\akfilepackagelut.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)\audiokinetic\wwise v2012.2.1 build 4427\sdk\samples\soundengine\common\akfilepackagelut.h(204): error C2065: 'NULL' : undeclared identifier
c:\program files (x86)\audiokinetic\wwise v2012.2.1 build 4427\sdk\samples\soundengine\common\akfilepackagelut.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
]
答案 0 :(得分:1)
对我来说,第一眼看上去就像你没有指定模板参数一样。
其他可能的原因:
您正在使用C运行时的调试版进行编译,声明了一个 标准C ++库迭代器变量在for循环中,然后 试图在for的范围之外使用那个迭代器变量 环。使用调试版本编译标准C ++库代码 C运行时意味着/ Zc:forScope。请参阅Debug Iterator支持 更多信息。
您可能正在调用SDK头文件中的函数 目前在您的构建环境中不受支持。
省略必要的包含文件,尤其是在您定义的情况下 VC_EXTRALEAN,WIN32_LEAN_AND_MEAN或WIN32_EXTRA_LEAN。这些 符号从windows.h和afxv_w32.h中删除一些头文件 速度编译。 (查看windows.h和afxv_w32.h以获取最新信息 什么被排除在外的描述。)
标识符名称拼写错误。
标识符使用错误的大写和小写字母。
字符串常量后缺少结束语。
不正确的命名空间范围。解析ANSI C ++标准库 例如,函数和运算符必须指定std 带有using指令的命名空间。以下示例未通过 编译,因为using指令被注释掉,而cout是 在std名称空间中定义
答案 1 :(得分:1)
此错误消息说明如下:
<{1>}<path...>\akfilepackagelut.h
中有一个函数模板的定义。事实上,它是一个模板化的方法。在该定义内,在第204行,使用名称NULL
。 NULL
在C标准库的标头<cstddef>
中定义,通常您可以通过包含许多C / C ++标头中的一个来包含该定义,因为它们中的大部分以某种方式包含<cstddef>
。但是,akfilepackagelut.h
似乎只包含您正在使用的VS2012安装中的标题 not 包含该定义,因此编译器不知道NULL的含义。
错误消息的其余部分只是模板错误乱码,告诉你我们正在谈论的那个函数模板已经在AkFilePackageLUT.cpp
的某个地方实例化了两次,告诉你确切的位置和模板参数等等。
你能做什么?
好吧,如果你不能像你说的那样修改源代码(为什么?你拥有源代码)你不能做任何事情,但可能会为项目提交一个bug。如果您可以修改它,最好#include <cstddef>
中的akfilepackagelut.h
。