- 목차
MSB4236
- 문제 : 설치되어 있는 Windows 10 SDK가 Solution 목록에 없음.
- 해결 방법
- SDK를 다른 버전으로 수정
https://mewha.tistory.com/12 - SDK 재설치
- StackOverflow
- SDK를 다른 버전으로 수정
- 추가
본인의 경우. VS2017 위에 VS2019 Build tool을 설치했는데, 이 과정에서 SDK가 꼬인 것 같았다.
(Windows SDK 10.0.17763.0) 결국 해당 버전만 삭제한 후, 수동으로 인스톨 파일을 다운로드해서 설치했다.
원하는 버전의 인스톨 파일을 찾으면 된다. |
---|
C4668
- 메시지 예시 :
winioctl.h(10326): [C4668] '_WIN32_WINNT_WIN10_TH2’은(는) 전처리기 매크로로 정의되어 있지 않으므로 '#if/#elif’에 해당하는 '0’으로 바뀝니다.
- 문제 : 언리얼에서 외부 코드 사용시 발생
- 해결 방법
- 프로젝트 build.cs 내부에 아래 내용 추가
bEnableUndefinedIdentifierWarnings = false;
참고
https://smstock.tistory.com/entry/UE4-WIN32WINNTWIN10RS2-%EB%B9%8C%EB%93%9C-%EC%98%A4%EB%A5%98
C1189 | No Target Architecture |
증상 | |
해결방법 | #include <Windows.h> 헤더를 포함하면 해결된다는 글이 많이있다. |
참고 링크 | https://stackoverflow.com/q/4845198/7017299 |
Error C2065, C2067
코멘트 :
원인 : 다이얼로그 추가시 뜬금 없이 발생
방법 1. 다이얼로그 Header에 #include "resource.h"를 추가
방법 2. 헤더에서 있는 리소스 값을 소스에 직접 대입
다이얼로그 Header에 아래 부분 주석처리
enum{ IDD = 리소스 아이디 };
다이얼로그 source에서 생성자 부분에서
다이럴로그View::IDD 로 된 부분을 리소스 아이디로 바꿈
Error C2338
프로젝트 속성 -> 구성 속성 -> C/C++ ->전처리기에 _CRT_NO_VA_START_VALIDATION 추가
참조 링크 : https://codingcoding.tistory.com/397
Error C2504
코멘트 : 기본 클래스를 정의하지 않았습니다.
방법 1. Header가 잘 Include 되어 있나 확인
참조 링크 : http://yayane2.tistory.com/21
방법 2. 클래스들의 포함 관계 확인
참조 링크 : http://yguu.tistory.com/21
방법 3. Header에 #pragma once가 선언되었는지 확인
C2653, C3861 | |
증상 | C2653 : 클래스 또는 네임스페이스 이름이 아닙니다 C3861 : 식별자를 찾을 수 없습니다 |
해결방법 | 방법 1 : Header가 중복 선언되어 있는지 확인 (보통 해결 방법) 방법 2 : 누락된 Header없이 잘 Include 되어 있나 확인 |
참고 링크 |
C4819 | |
증상 | Warning C4819 : 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. |
해결방법 | 1. #pragma warning(disable:4819) 추가 2. 해당 경고문이 뜨는 파일의 인코딩 방식을 변경하여 저장 - 인코딩 방식 1) 유니코드 - 코드 페이지 1200 - 인코딩 방식 2) 유니코드(서명 있는 UTF-8) - 코드 페이지 65001 <- 본인은 이 방법으로 해결 |
참고 링크 | https://cypsw.tistory.com/32 https://www.titorus.com/?p=426 |
< CS0229, CS0121 > | |
증상 | 메서드 또는 속성 간 호출이 모호합니다 |
해결방법 | 방법 1. using을 구분 되도록 잘 입력하든가 (예 : Media3D의 경우 System.Windows.Media.Media3D) 방법 2. 함수 명이 동일한 것을 수정해 보든가.... 방법 3. 만일 문제가 없다고 생각되는데도 에러가 뜬다면.. 프로젝트 파일 경로로 들어가서 소스 파일을 잘 살펴보자. 솔루션 탐색기 (또는 프로젝트) 상에서는 포함되지 않아 있지만, 폴더 하나 차이로 중복된 소스 파일 (클래스명이 동일한)이 존재할 수 있다. (예를 들어 MainView.cs 파일이 A폴더와 B폴더와 같이 있는 경우) 방법 4. csproj 파일을 메모장이나 notepad++로 열어서 각 소스 파일들의 관계도를 살펴본다. 중복된 파일이 있거나, DependentUpon 속성이 잘못 매칭된 경우가 있다. 솔루션 탐색기에서 소스 파일을 복사해서 붙여 넣기 기능을 사용하다가 꼬인것 같다.... 귀찮더라도 파일은 직접 생성을 하고 소스코드를 복붙 하는 것이 안전할 듯 하다. 리팩토링을 하려면 파일 이름을 직접 수정하는 것이 좋다. 파일 이름을 직접 수정하면 연결되어 있는 다른 참조도 바꿀 것이냐는 대화상자가 같이 뜨게 된다. |
참고 링크 | 직접 해결... |
< LNK2001 > | |
증상 | 템플릿 (template) 관련 코드를 사용할 때, LNK2019와 같이 발생 |
해결방법 | 보통 C++ 코드를 작성할 때 Header와 Cpp를 분리하지만, 템플릿의 경우에는 모든 코드를 Header 안에 넣어야 한다. |
참고 링크 | http://wjsb.tistory.com/10 https://stackoverflow.com/a/495056/7017299 |
< LNK2028 > | 해결되지 않은 토큰 |
종류 | Error |
증상 | LNK2019, LNK1120도 동반한다 |
해결방법 | 어떻게 정의 되어 있는지 알 수 없는 함수를 참조할 때 발생하는 오류. (예로 들면, Add 함수 명은 알지만, 그 내용을 모르는 경우) 다음을 확인해본다. (아래의 항목의 입력값은은 예시이며, 누락된 항목이 있으면 자신이 찾아서 입력해야한다.)
|
참고 링크 | https://stackoverflow.com/a/11069191/7017299 |
< LNK2019 > | (함수명) 외부 기호 ~~~ 에서 확인하지 못했습니다. |
증상 | |
해결방법 | 타 포스트에서 잘 정리 된 것이 많다. 본인의 경우 "미리 컴파일된 헤더를 사용하지 않음"을 설정을 사용하고 발생했는데 MFC 프로젝트 생성시 자동으로 만드는 stdafx.h 내부에 선언되어 있는 afxwin.h를 목표한 소스코드에 선언하니까 문제가 해결되었다. Unreal engine에서 발생한 경우. 로그에 나온 함수에 맞는 module 명을 build.cs 파일 내부 PublicDependencyModuleNames에 추가해줘야 한다. LNK1120 (확인할 수 없는 외부 참조) 같이 나오는 경우도 있다. |
참고 링크 | http://vaert.tistory.com/5 http://devhoma.tistory.com/49 https://real-book.tistory.com/entry/Tip-Error-LNK2019-Link-Error-%EB%B0%9C%EC%83%9D%EC%8B%9C-%ED%99%95%EC%9D%B8%ED%95%B4%EB%B3%BC-%EA%B2%83%EB%93%A4 |
<LNK2005> <LNK1169> |
여러 번 정의된 기호가 있습니다. |
증상 | (MFC) main함수를 두개 이상 선언하거나, 라이브러리가 중복 정의 되었을 경우 발생. LNK2005의 경우 어떤 것이 중복되었는지 설명해주는 경우가 있다. |
해결방법 | <함수가 중복 링크되었다면> 방법 1. 함수 중복 제거 (예로 main 함수는 하나만 있어야 된다.) 방법 2. 해당 함수 앞에 static 또는 inline추가 <라이브러리가 중복 링크되었다면> 방법 1. 헤더파일에 #pragma once를 추가 방법 2. 다음과 같은 전처리기에 코드를 감싼다 ...코드... 방법 3. 헤더파일을 h파일 대신에 cpp에 추가해본다. |
참고 링크 |
_Win32_WINNT not defined
이 녀석은 오류라기보다는 경고에 가깝다. 프로그램이 실행은 된다.
헤더 SDKDDKVer.h를 선언하면 사라진다.
GDI
초기화 구문을 썼는지 확인하자...
CS0227
코멘트 : 안전하지 않은 코드는 /unsafe를 사용하여 컴파일하는 경우에만 나타날 수 있습니다.
원인 : 본인의 경우 dll을 import하고 프로그램을 (Release 모드에서) 실행하다가 발생함
해당 프로젝트 우클릭하여 속성 페이지로 들어간다.
"빌드" 에서 "안전하지 않은 코드 허용" 및 "코드 최적화"에 체크를 한다. (Debug 모드에서는 체크 되어 있으나 Release에서 안되있었음)
참조 링크 : https://overface.tistory.com/8
System.IO.FileNotFoundException
본인의 경우 멀티 프로젝트를 두어 하나는 UI를 담당하고, 다른 하나는 dll을 담당하는 C#프로젝트 설계 중이었음.
회사에서 하는 것을 집에와서 clone해서 돌리려고 하는데, 회사에서 잘만되는 것이 집에서는 예외 발생
partial class의 (NuGet package의 요소를 사용하는) 메소드를 호출하지 못하는 현상이 있었음.
git에서 변경 점을 살펴보니, csproj파일에서 <hintpath> 부분의 경로 값이 bin -> obj 된 부분이 있어서
이를 복구하니 예외가 발생하지 않았다.
내 예상으로 hintpath는 아무래도 "솔루션 탐색기"에 있는 "참조" 값을 설정할 때 지정되는 값인 것 같다.
E1696 | 파일 소스을(를) 열 수 없습니다. |
증상 | include 부분에 빨간줄 |
해결방법 |
|
참고 링크 | https://blog.naver.com/bh5619/221035836034 http://blog.naver.com/an060875/221369843218 |
OleDbException (0x80004005) |
설치 가능한 ISAM을 찾을 수 없습니다. (Could not find installable ISAM) |
증상 | OleDbConnection 객체에서 Open 메서드 실행 시 발생하는 오류 |
해결방법 | 방법 1. ConnectionString을 잘살펴 볼것! (대부분 커뮤니티의 답변이며, 공백 유무도 확인해볼 것) 예1) Data Source에서 Data와 Source 사이에 공백이 있어야한다. 방법 2. 프로젝트 플랫폼 타겟 확인 (x84, x64) 방법 3. OLE DB Driver를 설치해본다. (링크) 방법 4. MS Access Runtime을 설치해본다. (가능한 영문 버전으로) 2013 런타임 링크 / 2016 런타임 링크 / Office 365 런타임 링크 방법 5. MS Access DB Engine Redistributable을 설치해본다. (가능한 영문 버전으로) 2010 재배포 가능 패키지 링크 / 2016 재배포 가능 패키지 링크 |
참고 링크 | https://stackoverflow.com/a/49319622/7017299 |
증상 | VS 2019 설치시 "공유 구성 요소, 도구 및 SDKs" 경로 변경 부분 변경이 불가 |
해결방법 | 컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\Setup 로 이동한 후 SharedInstallationPath의 경로를 수정한다. |
참고 링크 | https://championprogram.tistory.com/463 |
증상 | C++ 프로그램 (MFC) 디버깅 또는 실행시 리소스 부분에서 MFC dll관련 오류 메시지를 띄움 |
해결방법 | Windows 10 기준 마우스 우클릭 후, 디스플레이 설정 → "배율 및 레이아웃" 부분에서 "텍스트, 앱 및 기타항목의 크기 변경"의 값을 100%로 수정하고 다시 시도 (MFC 고유의 에러로 예상) |
참고 링크 |
modernize-return-braced-init-list | |
증상 | 생성자를 두번 호출하는 것을 예방하기 위해 발생하는 경고로 예상 |
해결방법 | 객체 명을 없애고 중괄호로 변경 예) return Foo(abc) => return {abc} |
참고 링크 | https://clang.llvm.org/extra/clang-tidy/checks/modernize-return-braced-init-list.html |
Fallback 위치 변경
- 메뉴 위치 : 도구 → 옵션 → 텍스트 편집기 → C/C++ → 고급 → 데이터베이스 대체를 찾아보는 중
- 옵션 변경
- 항상 대체 위치 사용 : True
- 대체 위치가 사용되는 경우 경고 안 함 : True
- 대체 위치 : 원하는 (폴더) 경로
댓글
댓글 쓰기