0

我正在尝试将 wwise 集成到一个测试项目中。我在 Windows 7 上有一个使用 ms Visual Studio 2010 的项目,这是我尝试向项目添加必要的 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
      ]
4

2 回答 2

1

此错误消息说明以下内容:

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

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

你能做什么?好吧,如果你不能像你说的那样修改源代码(为什么?你有源代码),你什么也做不了,只能为项目提交一个错误。如果可以修改最好#include <cstddef>akfilepackagelut.h.

于 2012-11-28T10:22:41.990 回答
1

对我来说,乍一看好像您没有指定模板参数。

其他可能的原因:

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

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

  • 省略必要的包含文件,尤其是在您定义 VC_EXTRALEAN、WIN32_LEAN_AND_MEAN 或 WIN32_EXTRA_LEAN 时。这些符号从 windows.h 和 afxv_w32.h 中排除了一些头文件以加快编译速度。(在 windows.h 和 afxv_w32.h 中查看排除内容的最新描述。)

  • 标识符名称拼写错误。

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

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

  • 命名空间范围不正确。例如,要解析 ANSI C++ 标准库函数和运算符,您必须使用 using 指令指定 std 命名空间。以下示例无法编译,因为 using 指令被注释掉并且 cout 定义在 std 命名空间中

于 2012-11-28T09:40:18.683 回答