본문 바로가기

C,C++/Error & Warning10

C 및 C++ UTF-8 text file read/write 하는 법 인코딩이 UTF-8 로 되어 있는 텍스트 파일을 read하거나 write하고 싶을 때 아래와 같은 추가 설정이 필요. C의 경우(fread, fopen과 같은 C 계열 함수 사용시) fopen 시 다음과 같이 3번째 인자를 추가해준다. // read fopen_s(&fp, "file3.txt", "rt+,ccs=UTF-8"); // write fopen_s(&fp, "file3.txt", "wt+,ccs=UTF-8"); 그리고 파일 관련 동작을 수행하기 전 적절한 위치에 다음과 같은 코드를 추가한다. (docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=msvc-160) // 아래 세 가지 중 아무거나 하나 .. 2021. 3. 28.
[C++] list iterators incompatible Error 나같은 경우는 list의 어떤 반복자가 end와 같은지 비교하는 곳에서 에러가 났다. 원인은 엉뚱한 컨테이너의 반복자와 비교를 하고 있었다. 즉 list가 A, B 두 개 있을 때 A의 반복자는 A의 end와 비교해야 하는데 코드를 복붙한 부분이 있었는데 실수로 수정을 안해서 A의 반복자와 B의 반복자끼리 비교한 것이다. 그러니까 서로 다른 대상의 반복자를 비교하고 있는 건 아닌지 확인해보자. (실수일 가능성이 농후) 2020. 12. 18.
스레드 함수의 인자로 shared_ptr을 전달할 때 주의할 점 | _Incref 에러 주의할 점이라기 보단 나처럼 바보같은 실수로 시간 낭비하는 일이 없었으면 해서.. 기존에 잘 사용하던 함수가 있었는데, 이 함수를 메인 스레드가 아니라 new 스레드를 만들어서 new 스레드가 수행하도록 했다. 근데 뭔가 오류가 발생했다. 디버거로 한 단계씩 보았는데도 문제점을 찾기 어려웠다. 좀 더 자세히 확인해 보니 함수 내에서 인자를 사용하는 부분에서 런타임 에러가 발생했다. 바로 이 부분 혹시나 인자가 잘못 전달됐는지, 잘못 캐스팅됐는지 메모리를 확인해 보아도 당연히 똑같았다. 스레드를 사용하기 전이랑. 원래 디버깅 중에 런타임 에러가 발생하면 라이브러리 함수 내에서 에러가 발생한 부분을 보여준다. 근데 보통 봐도 도움이 안됐던 적이 많아서 이번에도 그냥 넘겼었다. 하지만 달리 방법이 없어 보고 .. 2020. 11. 8.
LNK 1104: cannot open file ~~~ for writing 전날까지 잘되던 실행이 갑자기 저런 링크 에러가 떴음. 찾아보니 프로그램이 디버그 모드에서 이미 실행 중일 경우 뜰 수 있다함. 이미 이러한 부분은 확인해서 다른 문제인줄 알았는데 혹시나 해서 작업 관리자에서 실행 중인 프로그램 찾아보니 있었음. 종료하고 실행해보니 잘됨. 아마 어제 실행 시켜놓은 상태로 노트북을 닫아서 메모리 상에 남아있었던 듯함. 2020. 9. 7.
[C++] 함수 템플릿 특수화 관련 링크 에러 | LNK1169, LNK2005 함수 템플릿 특수화하는데 컴파일은 정상적으로 되는데 링크 과정에서 계속 다음과 같은 에러가 발생 error LNK2005: ~~~ already defined in ~.obj fatal error LNK1169: one or more multiply defined symbols found 찾아보니 컴파일 후 만들어진 파일들로 linking 과정에서 하나로 합치려 할 때 중복되는 정의가 있을 때 발생한다고 함. 내 코드에선 다음과 같이 특수화 한 함수의 선언과 정의가 분리되지 않아서 발생하는 에러였다. // Foo.h template T Foo::Func() { ... } template float Foo::Func() { ... } 위 코드의 선언과 정의를 아래와 같이 헤더와 cpp파일로 분리해서 작성해.. 2020. 3. 2.
[C++] LNK2001, LNK1120 링크 오류 (static 관련) 다음과 같이 클래스 내부에 static 멤버 변수를 선언하고 static 멤버 함수 내에서 사용하는데 계속 위와 같은 링크 에러가 발생하였다. // A.h class A { public: static void Func(); .... private: static int num; }; // A.cpp void A::Func() { num = 5; } 링크 에러는 뭔가 서로 연결해주지 못해서 발생하는 에러인데, 일단 static 변수는 프로그램 시작하고 클래스 개체 생성 전에 메모리에 올라가기 때문에 static 함수에서만 사용 가능하다는 건 알 것이다. 그래서 나는 그냥 static 변수면 static 함수에서 바로 사용할 수 있는 줄 알았다. (내 기억으론 자바에선 그렇게 썼던 것 같았는데) 근데 찾아보니.. 2020. 2. 4.