본문 바로가기

공부

error LNK2019 에러의 경우 error LNK2019 에러의 경우 막 이 에러가 왜 나는가 해결법은 무엇인가 하는 글들이 많다. 하지만 실제로 그 행동을 해서 에러가 해결되지 않는 경우가 많다. 에러를 자세히 보면 왜 그런 에러가 나는지 알 수 있는데. 일단 에러를 보자. 오류1error LNK2019: "public: int __cdecl CMark::LoadMark(void)" (?LoadMark@CMark@@QAAHXZ) 외부 기호(참조 위치: "public: int __cdecl CMark::Init(void)" (?Init@CMark@@QAAHXZ) 함수)에서 확인하지 못했습니다.Mark.objE9 (E9\Program Main\E9) 이 경우 무엇이 문제일까? init 멤버함수 에서 사용되는 LoadMark 멤버함수가 정.. 더보기
오늘의 공부 단일체(Singleton) 싱글턴[싱글톤] 싱글톤[싱글턴] 의도 : 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고 이에 대한 전역적인 접근점을 제공. 활용성 : 클래스의 인스턴스가 오직 하나여야 함을 보장하고, 잘 정의된 접근접 으로 모든 사용자가 접근할 수 있도록 해야 할 때, 유일한 인스턴스가 서브 클래싱으로 확장되어야 하며, 사용자는 코드의 수정 없이 확장된 서브클래스의 인스턴스를 사용할 수 있어야 할 때. 결과 : 1. 유일하게 존재하는 인스턴스로의 접근을 통제 2. 이름 공간을 좁힘. 3. 연산 및 표현의 정제를 허용. 4. 인스턴스의 개수를 변경하기가 자유로움. 5. 클래스 연산을 사용하는 것보다 훨씬 유연한 방법임. 본인이 이해한 방법 : 다른 코드를 본다 -> 대체 무슨 용돈지 존나 열심히 본다 -> 알아낸다. 참 쉽죠. 솔까말.. 더보기
error LNK2001 : 구조체의 주소를 외부 파일에서도 참조할 시 뜨는 에러. 왜 발생하는가 -> extern struct_wpt* m_ptWptAll; 이런식으로 정해두고나서 쓰질 정의된 것이 없기때문에 참조를 하지 못하여 에러가 뜨는 것. 구글링을 해서 검색을 하면 무슨 라이브러리를 추가해야한다는둥 하는데 그냥 코딩을 잘못 한 것인 경우일 확률이 더 높다. 왜 저게 잘못되었냐.. 면 struct_wpt* m_ptWptAll; 라는 문장을 코딩하지 않아서 이다. 위에 extern struct_wpt* m_ptWptAll; 라고 코딩한 내용은 선언이지 정의가 아니다. 다시 말해서 위의 extern 문은 프로그램안에 이런 변수가 있다고 알려주는 역할 밖에는 하지 않는다. 변수의 영역을 잡아주지도 않았는데 어떻게 참조할 수가 있겠는가? 그런고로 .cpp 파일중 하나에서 struct_w.. 더보기
포인터 타입의 연산 일반적인 숫자의 덧셈은 +1 을 하면 1을 더한 값이 된다. 하지만 포인터 타입에서의 + 1은 1을 더한 값이 아니다. 예제를 보자. #include using namespace std; int main() { int array[10];// 배열 선언 int* p = &array[5]; // array[5] 의 주소값을 int형 포인터에 입력 cout 더보기
메뉴의 체크표시 변환 C++, MFC void CMainFrame::OnUpdateWindow3(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here if(m_nWindowNum==3) pCmdUI->SetCheck(TRUE); else pCmdUI->SetCheck(FALSE); } 구글에서 검색해보면 대부분 이런식으로 SetCheck 를 사용하는 것들에 대한 글이 대다수이다. 하지만 이 방식은 대화상자를 특정 방식으로 생성했을 때에만 작동하며 그 이외에는 작동하지 않는다. 이럴때에 CMenu *hMenu = GetMenu(); if(hMenu->GetMenuState(해당 메뉴의 아이디, MF_BYCOMMAND) != MF_CHECKED){ hMenu->Check.. 더보기