'c2383'에 해당되는 글 1건

  1. 2007/07/19 visual studio 2005에서 C2383 에러.. (2)
대략 예전에 vs6.0에서 만든 프로그램을 다시 볼일이 있어서 vs2005에서 프로젝트만 변환해서 컴파일을 해봤다.

그때 별로 특별하게 컴파일러에 의존적으로 작성한 코드가 없었다고 생각했기 때문에 컴파일이 잘 될거라고 생각했다.

그런데!!!!

뜨는 에러.. 바로 C2383...

d:\projects\dalory\dalme\winclient\dalmechatdlg.cpp(1001) : error C2383: 'Proc' : 이 기호에는 기본 인수를 사용할 수 없습니다.

뭔소리여.. 라고 생각하며 해당 코드를 보니 대략 이렇게 되어있었다.

void (*Proc)(CWnd *pWnd, CString MyNick, CString MyID, CString ip="");


마지막 인자의 기본값이 ""인 함수포인터 Proc를 선언하는 구문이다.

당연히 해당 함수의 선언이 저렇게 되어있기 때문에 저런 것도 문제가 없을거라고 생각을 했다.
그러나 vs2005에서는 에러를 퉤!! 뱉으며 거부를 했다..

그래서 msdn에서 찾아보니 아래와 같이 나온다.

오류 메시지

'symbol' : 이 기호에는 기본 인수를 사용할 수 없습니다.
'symbol' : default-arguments are not allowed on this symbol

C++ 컴파일러에서는 함수에 대한 포인터에 기본 인수를 사용할 수 없습니다.

이전 버전의 컴파일러에서는 이 코드를 사용할 수 있지만 현재 버전에서는 오류가 발생합니다. 모든 버전의 Visual C++에서 코드가 작동하도록 하려면 함수 포인터 인수에 기본값을 할당하지 마십시오.


이제는 지원 안한단다 ㄱ-..

왜!!!

덕분에 함수포인터에 저장한 함수에 기본값을 사용할수 없게 되었다 ㄱ-

뭐 기본값을 사용 못한다고 해서 함수 호출이 불가능한건 아니지만.. 대신 기본값이 있는 함수는 직접 헤더를 열어서 확인 후 기본값을 지정해줘야하고.. 만약에 나중에 함수의 기본값 부분이 바뀐다고 하면 그때마다 호출하는 부분에서 다 바꿔줘야한다..

대략 난감하기 서울역에 그지 없다..

뭐 함수 포인터를 직접 함수 이름을 대입하여 사용하는 경우라면 컴파일시 에러가 나오겠지만..

대략 아래와 같은 코드는 에러도 안난다..
다만 기다리는건 런타임 에라 ....

Proc = (void (*)(CWnd *pWnd, CString MyNick, CString MyID, CString ip)) GetProcAddress(module, "StartGame");

//만약에 마지막 인자의 기본값이 빈스트링이 아니라 다른 타입으로 바뀌었다면 대략 데스티네이션 3를 찍는것과 같은 효과를 나타낸다.
Proc((CWnd*)this, m_pMainDlg->m_Nick, m_pMainDlg->m_stringID, "");


이게 원래 표준이 아니였나 ㅠ
님들아.. 이렇게 좋은걸 왜 표준에 안넣어주나연.ㅠ
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/07/19 22:00 2007/07/19 22:00