‘Application’ does not contain a definition for ‘Run’

Error 3 ‘Application’ does not contain a definition for ‘EnableVisualStyles’

Error 4 ‘Application’ does not contain a definition for ‘SetCompatibleTextRenderingDefault’

Error 5 ‘Application’ does not contain a definition for ‘Run’

말 그대로…

저 메서드를 갖고 있지 않다는 뜻이다.

왜 갖고있지 않느냐..하는 문제..

동일한 경로를 가진 중복이 발생해서 그렇다.

using System.Windows.Forms; 보다 더 접근이 쉬운 Application이라는 객체가 생성되어 있는 상황이다.

System.Windows.Forms.Application 이라고 명시를 해 주면 해결된다.
최근 비슷한 경우를 많이 겪어봐가지고... 금방 해결됐지.. 아니었으면 고생 좀 할뻔했다.

 

영어로도 써놔야될까…

As to Error message ‘Application’ object doesn’t have ‘EnableVisualStyle’ ,’ SetCompatibleTextRenderingDefault’, ‘Run’…

Definetely another Application object is appear in your project.
and that 'Application'object is more accessible than Original 'Application'
Solution:
Just Explicit path of object "System.Windows.Forms.Application"
알아는 볼래나... 쓰긴 썼는데 해석은 잘 안되는 영어...참..InputStream밖에 없는 영어교육...

프로그래밍 중 오류 처리 방법

다른 컴파일러는 많이 안 써봐서 모르겠는데…

비주얼스튜디오…

특히 2008 이후버전은 에러 메세지가 굉장히 친절하다

 

그 중에도 또 특히 닷넷은 더 친절하다.

기본문법만 익히고 에러메세지 보면서 처리 해 가면서 배워도 될 정도로….

컴파일 오류가 발생하면 에러메세지를 하나하나 처리하면 프로그램이 잘 돌아가게 된다.

아직 프로그래밍을 해 본지 얼마 안되서… 에러 메세지로 해결 못할 오류는 한번인가 만나봤었는데… 정확한 상황은 잘 기억이 안 난다. 그 전에 고쳤던 부분이 어딘지 알고 있어서 다행히 쉽게 고쳤던 것 같다.

 

에러메세지는 대부분 구글검색으로 해결한다.

90%가량은 그대로 따라하면서 처리가 가능하고 10%가량은 머리를 써서 처리해야 하는 복잡한 문제다.

 

error C2440: ‘static_cast’ : cannot convert from ‘void (__thiscall CWMCALOADERDlg::* )(WPARAM,LPARAM)’ to ‘LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)’

이런 에러 메세지는 그대로 붙여넣으면 검색결과가 전혀 나오지 않는다.

공통부분을 뽑아서 검색

error C2440: ‘static_cast’ : cannot convert from

error C2440: ‘static_cast’ : cannot convert from 여기에 void와 LRESULT를 추가해도 된다.

 

항상 네이버나 MSDN에서 찾는것보다 구글에서 검색하는게 백배 더 빠르다.

시간낭비를 줄이기 위해서~

error C2440: ‘static_cast’ : cannot convert from ‘~’ to ‘~’

error C2440: ‘static_cast’ : cannot convert from ‘void (__thiscall CWMCALOADERDlg::* )(WPARAM,LPARAM)’ to ‘LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)’

MSDN은 안보이는데… 관련 에러에 대한 다른 포스팅들

http://blog.stevienova.com/2007/02/28/error-c2440-static_cast-cannot-convert-from-uint-__thiscall-cstaticlink-cpoint-to-lresult-__thiscall-cwnd-cpoint/

 

가장 도움이 된 곳 http://devday.tistory.com/entry/error-C2440-staticcast-cannot-convert-from-void-thiscall-XXX-WPARAMLPARAM-to-LRESULT-thiscall-CWnd-WPARAMLPARAM

 

BEGIN_MESSAGE_MAP(CWMCALOADERDlg, CDialog)
	//{{AFX_MSG_MAP(CWMCALOADERDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CONNECT, OnConnect)
	ON_BN_CLICKED(IDC_DISCONNECT, OnDisconnect)
	ON_BN_CLICKED(IDC_BALANCE, OnBalance)
	ON_BN_CLICKED(IDC_BUTTON_CURRENT, OnButtonCurrent)
	ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)
	ON_BN_CLICKED(IDC_ORDER, OnButtonOrder)
	//}}AFX_MSG_MAP

	ON_MESSAGE(CA_WMCAEVENT, OnWmcaEvent)//****//에러가 발생한 위치
END_MESSAGE_MAP()
//////////////////////////////////

//void이던 리턴값을 LRESULT로 바꿔주고...
LRESULT CWMCALOADERDlg::OnWmcaEvent(WPARAM dwMessageType, LPARAM lParam)
{
	switch(dwMessageType) {
	case CA_CONNECTED:			//로그인 성공
		OnWmConnected( (LOGINBLOCK*)lParam );
		break;
	case CA_DISCONNECTED:		//접속 끊김
		OnWmDisconnected();
		break;
	case CA_SOCKETERROR:		//통신 오류 발생
		OnWmSocketerror( (int)lParam );
		break;
	case CA_RECEIVEDATA:		//서비스 응답 수신(TR)
		OnWmReceivedata( (OUTDATABLOCK*)lParam );
		break;
	case CA_RECEIVESISE:		//실시간 데이터 수신(BC)
		OnWmReceivesise( (OUTDATABLOCK*)lParam );
		break;
	case CA_RECEIVEMESSAGE:		//상태 메시지 수신 (입력값이 잘못되었을 경우 문자열형태로 설명이 수신됨)
		OnWmReceivemessage( (OUTDATABLOCK*)lParam );
		break;
	case CA_RECEIVECOMPLETE:	//서비스 처리 완료
		OnWmReceivecomplete( (OUTDATABLOCK*)lParam );
		break;
	case CA_RECEIVEERROR:		//서비스 처리중 오류 발생 (입력값 오류등)
		OnWmReceiveerror( (OUTDATABLOCK*)lParam );
		break;
	default:
		break;
	}
	return 0;//리턴값을 넣어주니까 통과..
}

 

비슷한 오류가 많은 것 같은데…

처리방법은 이런식으로 응용하면 될 듯 하다.

이번 경우에는 에러메세지가 void랑 LRESULT랑 처리를 못 하겠다는 뭐 그런거니까…

void를 LRESULT형태로 바꿔준것..

missing type specifier – int assumed. Note: C++ does not support default-int

http://msdn.microsoft.com/ko-kr/library/ms173696(v=VS.100).aspx

MSDN에 한글로 번역돼있지만 뭔소린지 잘 모르겠다.

 

// C4430.cpp
// compile with: /c
struct CMyClass {
   CUndeclared m_myClass;  // C4430
   int m_myClass;  // OK
};

typedef struct {
   POINT();   // C4430
   // try the following line instead
   // int POINT();
   unsigned x;
   unsigned y;
} POINT;

 

소스코드를 보면…int를 명시적으로 선언하라는 것 같다.

 

 

‘symbol’ : default-arguments are not allowed on this symbol

비주얼 스튜디오 에러 메세지
‘symbol’ : default-arguments are not allowed on this symbol

 

비주얼스튜디오 6에서는 통하던건데…

함수 파라미터에서 변수 초기화를 시키는 이해할 수 없는 문법

요즘은 이렇게 안 만들지만, 옛날 프로그래머들이 많이 해 놓은것들… 소스코드 받아서 실행시키면 아주 자주 발행하는 에러

VisualStudio6에서 프로그램을 안 배워봐서 파라미터는 받으면서 초기화하는게 왜 필요한지 진짜로 모르겠다. 이럴거면 파라미터로 받을 필요가 없잖아….

에러 처리는 파라미터에서 초기화시키는것들을 다 지워주면 된다.
함수 내부에서 파라미터를 초기화 해 주는 형태로 다시 만들어야할듯...
// C2383.cpp

// compile with: /c
void (*pf)(int = 0);   // C2383
void (*pf)(int);   // OK