0

wwise をテスト プロジェクトに統合しようとしています。ms Visual Studio 2010 を使用して Windows 7 でプロジェクトを行っていますが、これは必要な 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++ ヘッダーの 1 つを含めることでその定義を含めることができます<cstddef>。ただし、akfilepackagelut.h使用しているVS2012インストールにはその定義が含まれていないヘッダーのみが含まれているようであるため、コンパイラーはNULLの意味を知りません。

エラー メッセージの残りの部分は、意味不明なテンプレート エラーであり、私たちが話している関数テンプレートが のどこかで 2 回インスタンス化されたAkFilePackageLUT.cppことを示し、正確な場所とテンプレート パラメータなどを示しています。

あなたは何ができますか?あなたが言うようにソースを変更できない場合 (なぜですか?ソースを持っています)、おそらくプロジェクトのバグを報告する以外に何もできません。変更できる場合は、に変更するのが最善#include <cstddef>ですakfilepackagelut.h

于 2012-11-28T10:22:41.990 に答える
1

テンプレートパラメータを指定していないように見えます。

その他の考えられる原因:

  • C ランタイムのデバッグ バージョンでコンパイルし、標準 C++ ライブラリの反復子変数を for ループで宣言し、その反復子変数を 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 に答える