switch문에서 변수를 선언하여 사용하려 할 경우 변수를 선언하지 않은 다른 case문에서 오류가 발생함


1
2
3
4
5
6
7
switch (val) {
     case 1
          int newVal = 42
          break
      case 2
          break
}
cs


case 지정은 switch내 해당하는 label로 점프하기 위하여 사용됨


블록이 시작하면 지역변수를 위한 공간이 메모리에 할당

그러나 val != 1 일 경우 초기화 부분이 실행되지 않는 문제점이 생겨버림

위 코드는 블록이 하나밖에 없는 상태이기 때문


case마다 블록을 지정해주면 다른 case에서 초기화 하지 않아도 됨


1
2
3
4
5
6
7
8
switch (val) {
     case 1: {
          int newVal = 42
          break
     }
      case 2
          break
}
cs


http://hashcode.co.kr/questions/372/%EC%99%9C-%EC%8A%A4%EC%9C%84%EC%B9%98-%EB%AC%B8%EC%97%90%EC%84%9C%EB%8A%94-%EB%B3%80%EC%88%98%EB%A5%BC-%EC%84%A0%EC%96%B8%ED%95%A0-%EC%88%98-%EC%97%86%EC%96%B4%EC%9A%94

'C++' 카테고리의 다른 글

[C++] vector의 resize  (0) 2017.06.02
[라이브러리] string class 함수  (0) 2016.03.01

포인터 변수는 선언된 변수가 차지하는 메모리가 있지만 배열은 없음


char *cStr = "Pointer";

char []arrStr = "Array";


cStr = 1234;                 //작성할 수 있음

arrStr = 1234;              //작성할 수 없음


cStr에는 주소 값을 갖기 위한 메모리 영역이 있지만 arrStr은 할당받지 못하였으므로 사용 X


배열의 주소를 알고 싶으면


cStr = arrStr;             //가능. arrStr자체가 배열의 시작부분을 가리키기 때문

cStr = &arrStr;          //에러! 배열은 주소가 없으므로

cStr = &arrStr[0];     //가능. 배열의 첫 원소의 주소가 포인터에 들어감



http://forum.falinux.com/zbxe/index.php?mid=gcc&document_srl=804305

1
2
3
4
5
6
7
8
9
10
11
time_t timer = time(NULL);    //현재 시스템 시간 가져오기
tm calTime;
localtime_s(&calTime, &timer);    //받아온 현재 시스템 시간을 변환
 
CString time_current;
time_current.Format(_T("%d_%d_%d %d;%d;%d"), 
                                            calTime.tm_year+1900
                                            calTime.tm_mon+1, calTime.tm_mday, 
                                            calTime.tm_hour, 
                                            calTime.tm_min, 
                                            calTime.tm_sec);
cs


https://msdn.microsoft.com/ko-kr/library/w4ddyt9h.aspx

http://mwultong.blogspot.com/2007/05/c-localtimes-visual-c-2005.htm

http://blog.iwanhae.ga/introduction-to-opencv/


Mat에 대한 정말 기본적인 정리글 + 필터

SDK v7.1 설치시 오류 해결 방법


C:\Program Files\Microsoft SDKs\Windows\v7.1\Setup\SFX\vcredist_x64.exe installation failed with return code 5100 일 때


Microsoft Visual C++ 2010 재배포 가능 패키지의 최신 버전이 컴퓨터에 설치 되어 있기 때문에 발생

Windows 7.1 SDK에 포함 되어 있는 Microsoft Visual C++ 2010 재배포 가능 패키지를 최신의 Visual C++ 2010 재배포 가능 패키지 위에 설치할 수 없다

기존의 재배포 가능 패키지들(x86, x64)을 삭제한 뒤 SDK v7.1을 설치하고 그 후에 재배포 가능 패키지를 다시 설치


https://support.microsoft.com/ko-kr/kb/2934068


--------------------------------------------------------------------------------------------------------------------------------------------------------------------


설치한 후 VS2010(professional, express) SP1 업데이트 시 컴파일러가 삭제되는 경우가 있는데 컴파일러를 재설치해주면 된다

Ultimate나 Premium은 관계 X


https://support.microsoft.com/ko-kr/kb/2519277


CV_<비트수>(S|U|F)C<채널 개수>


8-bit unsigned integer (uchar) : CV_8U

8-bit signed integer (schar) : CV_8S

16-bit unsigned integer (ushort) : CV_16U

16-bit signed integer (short) : CV_16S

32-bit signed integer (int) : CV_32S

32-bit floating-point number (float) : CV_32F

64-bit floating-point number (double) : CV_64F


ex) CV_32FC1 - 32비트 실수형 1채

MFC 처음 생성했을 때 당황했다

어딜봐도 main함수가 보이질 않는다ㅠㅠㅠㅠ

빌드해서 실행시켜보면 대화상자 잘 뜨는데(대화상자기반으로 만듦)ㅠㅠㅠㅠ

브레이크 걸고 디버그 해봤더니 winmain.cpp 에서 int AFXAPI AfxWinMain이 실행됐

MFC는 WinMain()의 코드를 수정할 수 없다고 한다

초기화 관련 코드들은 대부분 InitInstance()에서 수행하도록 하는 듯


- 응용 프로그램의 설정 정보 로딩(ex: 윈도우 크기, 옵션, 스타일 등)
- 응용 프로그램 중복 실행 방지
- 시험 버전의 기간 검사 루틴
- 운영체제 버전의 확인과 프로그램 실행 허용 여부 결정
- 프로그램 사용자의 인증
- 프로그램 실행 시 인자로 전달되는 파라미터 처리 


와 같은 처리를 수행하기 좋다고 함!




SDK가 64비트 전용이었는데 난 32비트로 컴파일 하고 있었다

당연히..안됨...


64비트로 컴파일 하니 해결!

디버그 옆에 있는 드롭박스에서 변경할 수 있다ㅠㅠ

프로젝트 속성 - 구성 속성 - 일반 - 문자 집합 을 유니코드에서 멀티 바이트로 고쳐주었음

(Properties - Configuration Properties - General - Character Set)

그러니까 LPSTR 타입에서 LPCWSTR 타입으로 변환할수 없다고 하는 에러 뜨던 것이 사라짐


후에 변경할 것

'WIN32-MFC' 카테고리의 다른 글

[MFC] WritePrivateProfileString / GetPrivateProfileString  (0) 2017.05.15
[MFC] 현재 시간 가져오기  (0) 2016.12.02
[MFC] main함수의 위치는?  (0) 2016.11.23
[WIN32] 외부 링크 오류 해결  (0) 2016.11.22
[WINAPI] 오류 해결  (0) 2016.11.21

라이브러리를 사용할 계기가 생겨서 적용시켜보는데 자꾸 실패했다

희안한 오류만 나왔다

세미콜론이 없다/링크 사양을 사용할 수 없다 등등 같은

밑의 에러 종류는 error C2146/error C4430/error C2061 등으로 다양했음

에러 발생 위치는 모든 함수들(정확히 말하면 MINE_APIENTRY를 반환하는 모든 함수)


외부 라이브러리 사용법에 문제가 있는지 찾아보고 3가지 방법을 사용해보았는데 다 실패했다

1. .dll을 시스템에 넣고 .lib랑 .h를 해당 프로젝트 폴더에 넣기

2. VC++ 디렉터리에서 포함 디렉터리(.h)랑 라이브러리 디렉터리(.lib)에 해당 파일들 경로 넣어주기

3. C/C++-일반-추가 포함 디렉터리(.h)와 링커-일반-추가 라이브러리 디렉터리(.lib)에 해당 파일 경로 넣어주고 링커-입력-추가 종속성에 해당 .lib 추가하기


하루 종일 고민했는데

#define   MINE_APIENTRY   extern "C" int WINAPI 이 문장의 WINAPI 때문에 오류 발생

헤더 추가할 때 #include <windows.h> 이거 하나 없어서 오류났던 것


저 헤더가 없으면 WINAPI가 인식이 안되면서 온갖 에러를 뱉어낸다


친구가 예전에 using namespace std; 안써서 오류 700개 봤다 그랬을 때 엄청 웃었는데 웃을 처지가 아니었다


++아니..콘솔 응용으로 개발하는게 아니라 WIN32로 개발해야 되는거였다..아..

화이팅..공부...합시다...

+ Recent posts