오류

E0304 인수 목록이 일치하는 오버로드된 함수 "AfxMessageBox"의 인스턴스가 없습니다 에러 (MFC)

지창준 2024. 3. 5. 15:40

 

 

에러 설명에 앞서 Visual Studio의 경우 문자 처리는 멀티바이트와 유니코드이다.

 

멀티바이트란 (MBCS: Multi Byte Character Set)

유니코드가 생기기 이전에 다국어를 표현하기 위해 사용했던 방식으로

영어는 1바이트, 그 외 문자는 2바이트로 처리한다.

 

유니코드란 (WBCS: Wide Byte Character Set)

기존 멀티바이트의 가변적인 특성을 없앤 방식으로

모든 문자를 2바이트로 처리한다. (GCC는 4바이트)

 

 

결론적으로 위 같은 에러가 발생하는 이유는

MFC의 경우 유니코드를 default로 사용하기 때문에 유니코드 형식으로 적어줘야 인식한다.

아래 사진과 같이 텍스트 앞에 'L'을 추가해주면된다.

 

ex)  AfxMessageBox(L" AfxSocketInit 호출 실패 ");

 

 

MFC를 처음 사용하면 한번은 겪는 에러인 거 같다 (error C2665 에러로도 뜬다)

 

 

+)

문자를 처리할 때,

멀티바이트는 기본적으로 char를 사용하고, 유니코드는 wchar_t를 사용한다

이때 프로젝트 설정을 바꾸면 모든 변수를 변경해야 하는 문제가 발생한다

 

이런 문제를 해결하기 위해 나온 개념이 T 매크로로 자동으로 변환되어 컴파일 해준다

사용 방법은  '_T(" ") ' 괄호 안에 문자열을 작성해주면 된다.

 

ex) AfxMessageBox(_T(" AfxSocketInit 호출 실패 "));

 

 

참고로 멀티바이트 형식은 우리가 가장 흔하게 쓰는 " "이다.