0

私のクラスでは、と呼ばれる関数が宣言されていPlaySound(std::wstring)ます。このクラスは、独自の名前空間内に存在します。PlaySoundW()このメンバー関数をこのクラスのインスタンスから別の場所で呼び出そうとすると、何らかの理由でdefined inを呼び出そうとしているように見えるため、リンカー エラーが発生しますMMSystem.h。自分の名前空間に物を置くことは、この種の競合を防ぐことを意図していると思いましたか?

リンカー エラー:

Error   13  error LNK2019: unresolved external symbol "public: void __thiscall MyNamespace::SoundProcessor::PlaySoundW(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >)" (?PlaySoundW@SoundProcessor@MyNamespace@@QAEXV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z) referenced in function "public: void __thiscall MyNamespace::Engine::Init(struct HWND__ *,long *,long *,int)" (?Init@Engine@MyNamespace@@QAEXPAUHWND__@@PAJ1H@Z)

私がこれを理解できる最善の方法は、コードで使用していると不平を言っているようですが、クラスPlaySoundW()で定義していないということです。SoundProcessor私の関数は呼び出されませんPlaySoundW()

私は自分の関数をこのように呼び出しています(そして、関数が宣言されているものと同じ名前空間内から):

soundProcessor.PlaySound(TEXT("Sounds\\MySound.WAV"));

これが私が見逃した明らかなものであることを願っています。

4

1 に答える 1

0

発生しているエラーの種類と、関数が別の名前空間にあるという事実に基づく私の仮定は、次のスニペットがどこかにあるということです (おそらく Microsoft インクルード内):

#ifdef _UNICODE
#define PlaySound PlaySoundW
#else
#define PlaySound PlaySoundA
#endif // _UNICODE

これらのタイプの#defineステートメントは、ユニコードとマルチバイトの両方の文字エンコーディングを処理するように設計されているため、Microsoft の内部ヘッダーで一般的です。

この問題を回避するには、コードを使用する前に次のコードを追加することをお勧めします。

#undef PlaySound
于 2013-06-16T17:25:24.023 に答える