Programming Language/C/C++ 23

fatal error RC1015 cannot open the file "winres.h"

리소스 파일 로드 에러리소스 파일을 만들고 사용하기 위해 작업을 진행하였더니fatal error RC1015 cannot open the file "winres.h" 라는 메세지와 함께 오류만 발생한다이 경우에는 Windows SDK가 설치되지 않은 경우일 수도 있다Visual Studio Installer에서 추가로 설치해주거나 https://developer.microsoft.com/ko-kr/windows/downloads/windows-10-sdk마이크로소프트 개발자 홈페이지에서 직접 다운로드하여 설치하면 해결된다 설치 후에도 오류가 나타나는 경우 혹은 리소스 파일을 한 번 추가한 뒤 프로젝트에서 완전히 삭제시킨 후 다시 리소스를 추가한 경우에는작업 중인 솔루션을 닫은 후 다시 열어주면 해결된다

[WinAPI] "const char *" 형식의 인수가 "LPCWSTR" 형식의 매개 변수와 호환되지 않습니다

유니코드 타입인 TCHAR형 문자열은 "" 쌍따옴표를 사용하여 문자열을 대입하거나 복사할 경우 오류가 생긴다따라서 TEXT(""), L"" 로 문자열을 TCHAR형에 맞게 변형시켜줘야 한다 //오류 lstrcpy(str, "WinAPI 양배추한닢"); //해결1 lstrcpy(str, TEXT("WinAPI 양배추한닢")); //해결2 lstrcpy(str, L"WinAPI 양배추한닢");

[C++] export와 클래스 템플릿, 헤더 파일 나누기

export와 클래스 템플릿템플릿들은 클래스와 멤버 함수 정의가 아니다 클래스와 멤버 함수 정의를 생성하는 방법을 컴파일러에게 알려 주는 지시문이다 템플릿들은 함수가 아니기 때문에 개별적으로 컴파일할 수 없다 따라서 특별한 구체화 요구들과 함께 결함하여 사용해야 한다 보통 모든 템플릿 관련 정보를 헤더 파일에 집어 넣고, 그 템플릿들을 사용하는 파일에 그 헤터 파일을 포함시키는 것이다 하지만 위와 같은 방법은 코드가 깔끔해보이지 않을 수 있다 템플릿이 아닌 클래스의 경우 cpp 파일을 따로 나누어 함수 정의를 구현한다 템플릿 클래스의 경우는 export 키워드를 이용하여 그것이 가능하다 ... export template class nameclass { ... }; ... 주의할 점은 export 키워드..

[C/C++] char[] 문자열 초기화시 주의할 점

문자열을 동적 메모리를 할당하여 초기화 할 때 주의해야할 점이 있다 char str = new char[1]; delete[] str; //new[]를 사용하여 초기화 시킨 //포인터 및 널 포인터와 호환 char words[15] = L"bad idea"; char *p1 = words; char *p2 = new char; char *p3; delete []p1; //결과를 알 수 없다, 사용하지 말자 delete []p2; //결과를 알 수 없다, 사용하지 말자 delete []p3; //결과를 알 수 없다, 사용하지 말자 new []를 사용하여 초기화한 포인터나 널 포인터가 delete []와 호환되기 때문에 주의할 필요가 있다 p1, p2, p3와 같은 경우에는 delete []와 호환되지 않기..

[C/C++] 난수 생성하기, rand(), srand()

난수 생성하기확률을 이용하는 프로그램을 작성할 때 난수를 생성할 필요가 있다난수란 정의된 범위 내에서 무작위로 추출된 수를 말한다 [출처: 위키백과]난수는 어떻게 생성할까?난수를 생성해주는 함수는 rand()라는 함수가 있다rand() 함수의 원형은 stdlib.h 또는 cstdlib (C++) 파일에 포함되어 있다 #include #include int main() { std::wcout

[C/C++] 한글 출력 오류, 유니코드, MBCS, 국제화

한글 출력 오류VS 2017을 이용하면서 학습하던 중에 갑자기 한글 출력이 이상하다... 컴파일러가 음절 사이사이에 공백이 생긴 상태로 출력한다 #include #include using namespace std; int main() { char ch1[20] = "안녕하세요."; char ch2[20]; string str1 = "양배추한닢입니다."; string str2; cout ch2; cout str2; cout wcscat() strchr() -> wcscmp() strcpy() -> wcscpy() strstr() -> wcsstr() strrev() -> _wcsrev() 유니코드 문자를 다루는 방법을 알았으니 코드를 수정해보자 하지만 이번엔 출력조차 하지 못한다 왜냐하면 아직 한가지 작업..

[C/C++] namespace 제대로 사용하기

외부 전역 변수를 사용하지 말고, 이름이 namespace에 있는 변수를 사용한다변수의 출처가 명확해진다 정적 전역 변수을 사용하지 말고, 이름이 무명 namespace에 있는 변수를 사용한다static int a; 보다는 namespace { int a; } 를 사용한다 함수 또는 클래스 라이브러리 개발하는 경우, 그들을 하나의 namespace에 넣는다실제로 C++ 표준 라이브러리 함수들은 std라는 namespace에 넣을 것을 요구한다 using 지시자 사용을 피한다 //using 지시자보다는 using namespace std; //using 선언이나 사용 범위 연결 연산자(::)를 사용한다 using std::wcout; using std::wcin; wcout

[C/C++] ios_base 클래스, setf, fmtflags 출력 형식 지정

출력 모양을 바꿔보자결과값을 출력할 때 프로그래머의 임의대로 출력하는 형식을 지정하고 싶을 때가 있다이럴 때 setf를 사용한다ios_base::setf(MSDN) :: https://msdn.microsoft.com/ko-kr/library/1kte43a2.aspxsetf는 ios_base 클래스의 일부로 출력 형식을 바꿔주는 명령어다setf(ios_base::fmtflags)의 형태로 사용하는데 괄호 안에 들어가는 fmtflgs가 출력 형식을 지정하는 상수값이다dec: 10진수 형식이 정수 값hex: 16진수 형식의 정수 값oct: 18진수 형식의 정수 값boolalpha: 숫자 값이 아닌 bool 형식의 개체fixed: 고정 소수점 형식의 부동 소수점 값showpoint: 생성된 부동 소수점 필드에..

728x90