2013-06-16 6 views
0

제 클래스에서 나는 PlaySound(std::wstring)이라는 함수를 선언했습니다. 이 클래스는 자체 네임 스페이스 내에 있습니다. 이 클래스의 인스턴스에서이 멤버 함수를 다른 곳에서 호출하려고하면 어떤 이유로 에 정의 된 PlaySoundW()을 호출하려고 시도하는 것처럼 보이기 때문에 링커 오류가 발생합니다. 나는 내 자신의 네임 스페이스에있는 것들이 이러한 종류의 갈등을 막기위한 것이라고 생각했다.PlaySound()라는 멤버 함수는 호출시 링커 에러를 발생시킵니다.

링커 오류 :

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> >)" ([email protected]@[email protected]@[email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@@Z) referenced in function "public: void __thiscall MyNamespace::Engine::Init(struct HWND__ *,long *,long *,int)" ([email protected]@[email protected]@[email protected]@[email protected]) 

나는이 이해할 수있는 가장 좋은, 내 SoundProcessor에서 그것을 정의되지으니 그것이 내가 내 코드에 PlaySoundW()를 사용하고 불평하는 것 같다,하지만 수업. 내 기능은 PlaySoundW()이 아닙니다.

내가 (함수가 선언 된 것과 같은 네임 스페이스 내에서 AND에서) thusly 히 내 함수를 호출하고 있습니다 :

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

내가 바라고 이것이 내가보고 싶었어요 분명 뭔가있다.

+0

아마 일종의'#DEFINE는 PlaySound PlaySoundW의 매크로가를 ...'. 그리고 전처리 기는 네임 스페이스를 신경 쓰지 않는다. – catscradle

+0

네가 맞아,'MMSystem.h'에서'#define PlaySound PlaySoundW'라고 말합니다. 이것에 대해 제가 할 수있는 일이 있습니까? – Interminable

+0

@Shaktal은 다음과 같이 할 수 있습니다. 내 함수의 이름을 바꿀뿐입니다. – catscradle

답변

0

당신이 얻고있는 오류의 유형 및 기능은 별도의 네임 스페이스에 있다는 사실을 기반으로 내 가정은 다음 코드는 (아마도 마이크로 소프트가 포함에서) 어딘가에 있다는 것입니다 :

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

이러한 유형의 #define 문은 유니 코드 및 멀티 바이트 문자 인코딩을 모두 처리하도록 설계되어 있기 때문에 Microsoft의 내부 헤더에서 일반적입니다. 당신이 당신의 코드를 사용하기 전에이 문제를 해결하기 위해서는

, 당신은 다음을 넣어 할 수 있습니다 :

#undef PlaySound 
+0

함수 호출이 Windows API에서 사용중인 모든 것을 망칠 가능성을 정의하지 않습니까? 나는 직접 마이크로 소프트의'PlaySound()'버전을 직접 호출하지는 않는다. – Interminable

+0

헤더를 넣은 후에'#undef PlaySound'를 쓰고 마이크로 소프트 버전을 직접 호출하지 않으면 내부 코드가 깨져서는 안됩니다. –

+0

오른쪽, 마지막으로, 내 함수를 정의한 코드에서이 코드를 정의 해제해야합니까? 아니면 멤버 함수를 호출하는 코드에서 정의를 해제해야합니까? 아니면 둘 다 위해해야합니까? – Interminable