0

在我的课堂上,我声明了一个名为PlaySound(std::wstring). 此类位于其自己的命名空间中。当我试图从其他地方的此类的实例中调用此成员函数时,它会导致链接器错误,因为由于某种原因它似乎试图PlaySoundW()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 include 中):

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

这些类型的#define语句在 microsoft 的内部标头中很常见,因为它们旨在处理 unicode 和多字节字符编码。

为了解决此问题,您可能需要在使用代码之前放置以下内容:

#undef PlaySound
于 2013-06-16T17:25:24.023 回答