В моем классе у меня объявлена функция с именем 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"));
Я надеюсь, что это просто что-то очевидное, что я пропустил.
Мое предположение, основанное на типе ошибки, которую вы получаете, и тот факт, что ваша функция находится в отдельном пространстве имен, заключается в том, что где-то есть следующий фрагмент кода (вероятно, в Microsoft Включить):
#ifdef _UNICODE
#define PlaySound PlaySoundW
#else
#define PlaySound PlaySoundA
#endif // _UNICODE
Эти типы #define
операторы распространены во внутренних заголовках Microsoft, потому что они предназначены для обработки как кодировок Unicode, так и многобайтовых символов.
Чтобы обойти эту проблему, вы можете добавить следующее, прежде чем использовать свой код:
#undef PlaySound
Других решений пока нет …