Функция-член PlaySound () вызывает ошибку компоновщика при вызове

В моем классе у меня объявлена ​​функция с именем 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"));

Я надеюсь, что это просто что-то очевидное, что я пропустил.

0

Решение

Мое предположение, основанное на типе ошибки, которую вы получаете, и тот факт, что ваша функция находится в отдельном пространстве имен, заключается в том, что где-то есть следующий фрагмент кода (вероятно, в Microsoft Включить):

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

Эти типы #define операторы распространены во внутренних заголовках Microsoft, потому что они предназначены для обработки как кодировок Unicode, так и многобайтовых символов.

Чтобы обойти эту проблему, вы можете добавить следующее, прежде чем использовать свой код:

#undef PlaySound
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]