본문 바로가기

운동하는 개발자

(181)
ofstream 정의되지 않은 class 'std::basic_ofstream<char,std::char_traits<char>>'을(를) 사용합니다. 파일 쓰기를 위해서 간단하게 함수 호출을 하였다 std::ofstream output_file(filename, std::ios::binary); 컴파일을 돌려보니 'output_file'은(는) 정의되지 않은 class 'std::basic_ofstream'을(를) 사용합니다. 뭔 소리지 왜 정의되지 않았다고..? 생성자가 바뀌었나 찾아보았으나 동일했고 다른 예제들도 동일하게 사용하고 있었다 생성자를 빼고 선언만 해도 동일하게 에러가 발생했다 찾아보니 include가 빠져서 정의되지 않았다고 뜨는것이였다... 😅 #include 을 넣어줬었는데 실제 필요한 건 #include ​ 이것이었단 것... 끝 C++은 컴파일 오류 메시지부터 너무 불친절해...ㅠ
C++ 윈도우 환경변수 값 획득 (Get Windows Environment Variable Values) C++에서 ofstream 사용 시 path에 윈도우 환경변수(예시 : %appdata%)가 있으면 파일 생성이 되지 않았기에 해당 값을 획득 후 생성해야 했다 std::string 내에 환경변수가 섞여있는 경우의 예제가 없어서 직접 만들었다 std::string ReplaceEnvVar(const std::string& str) { std::string result = str; //문자열에서 환경변수 위치 찾음 std::size_t pos = result.find('%'); while (pos != std::string::npos) { std::size_t endpos = result.find('%', pos + 1); if (endpos != std::string::npos) { std::string..
c++ UTF8 to Euc-kr (UTF8 json 한글 데이터 std::string에 저장하기 + ofstream error) feat boost::locale 웹에서 http통신으로 json 한글이 섞인 데이터를 수신하였는데 UTF-8 타입이였다 이 UTF-8을 그대로 std::string에 넣어서 디렉토리 생성 함수는 정상적으로 동작하였으나 ofstream을 사용하여 파일 open시 에러가 발생하였다.. 디버깅해보니 한글이 들어간 문자열이 디버깅 환경에서 보이지 않았고 라는 문구를 보여주었다 물론 바이트별로 데이터를 볼 수 있었지만 한글은 ?? 로 표시되었으며 한 글자당 3바이트로 표현되고있었다 원인을 찾아보니 내 visual studio 2022환경에서는 디폴트로 코드페이지에 의해 EUC-KR이 기본이 되는거 같았다 코트페이지를 변경하거나 뭔가 다른방법이 있겠으나... 코드를 공유하는 같은 팀원들도 같은 이슈를 발생할 수 있다고 생각되서 UTF8을 EUC-..
Visual studio c++ fatal error C1128: 섹션 수가 개체 파일 형식 한도를 초과했습니다. /bigobj를 사용하여 컴파일하십시오. boost::asio를 사용하여 https 통신을 개발하고 있었는데 다음과 같은 에러가 발생했다 fatal error C1128: 섹션 수가 개체 파일 형식 한도를 초과했습니다. /bigobj를 사용하여 컴파일하십시오. 해결책은 단순히 /bingobj 옵션만 추가해서 컴파일 하면 되는 것인데 원인이 궁금했다 우선 바쁘신분들을 위한 해결책 프로젝트 속성 -> 구성 속성 -> C/C++ -> 명령줄 여기서 추가 옵션에 /bigobj를 넣으면 끝! 이어서 찾아본 원인을 얘기해 보자면 우선 공식 MS에 답변이다 출처 : https://learn.microsoft.com/ko-kr/cpp/build/reference/bigobj-increase-number-of-sections-in-dot-obj-file?vie..
c++ boost를 이용한 json 파싱 (boost::json & boost::property_tree) boost library를 사용하여 json 데이터를 파싱 하는 법을 찾아보니 두 가지 라이브러리가 있었다 둘 다 해더만 추가해서 간단하게 사용하는 방식이였고 자료는 property_tree 이게 압도적으로 많았고 boost::json은 잘 안 쓰이는지 예제 코드가 많이 없었다 특히 array내부의 값을 획득하는 예제를 찾는데 힘들었다 왜 동일한 기능의 라이브러리가 두가지로 나눠져 있나 궁금하여 찾아보았다 boost::property_tree가 먼저 나왔으며 이는 트리구조로 JSON뿐만 아니라 XML, INI를 읽을 수 있다 정확히는 JSON을 파싱 하는 용도라기보단 트리구조로 다양한 형식의 데이터를 처리하기 위한 라이브러리이다 다음 boost:json의 경우에는 목적 자체가 JSON데이터를 처리하기 위..
개발자가 보는 한글 번역기 비교 (Google translate, Papago, DeepL, ChatGPT) 기존에는 구글번역과 파파고를 주로 사용했었는데 최근 DeepL이라고 세계적으로 유명한 번역기에서 한글을 지원한다고 하여 사용해 보았다 DeepL은 특히 뛰어난 AI를 통해 문맥을 이해하며 번역하고 사람이 말하는 것처럼 번역해 준다며 홍보했었다 그 홍보대로 "안녕 2022, 안녕2023"을 번역해 보았다 유일하게 DeepL만 문맥을 이해하고 완벽하게 번역하였다 이 블로그 주인은 개발자이기에 주로 변역해야 하는 것은 해외 라이브러리 공식문서라던가 주로 개발 문서를 번역해서 본다 과연 개발 용어도 잘 이해하며 해석할까? Google의 c++ Style guide 내용의 일부를 번역해 보자 거의 비슷하게 번역되나 "변수 이름과 마찬가지로" 부분을 구글이나 파파고는 "변수이름만큼"이라고 어색하게 해석된 차이가 눈..
android adb를 이용한 native bug tracking (Android Debug Bridge 사용법) native 코드를 사용하는 android앱 개발 중 앱 crash 가 발생 하며 해당 앱이 강제 종료되었고 LogCat에는 다음과 같이 남아 있었다 ??? 마지막찍혀있는 로그는 특정 클래스의 소멸자 로그로 더 이상 추적이 불가능한 상황이였다 C++로 되어진 Native 코드를 라이브러리로 참조하기에 디버깅도 불가능했다 방법을 찾아보던중 adb를 이용해서 BugReport를 받아 볼 수 있다는걸 알게 되었다 우선 adb는 보통 SDK설치 경로쪽에 존재하는데 나처럼 android studio에서 함께 설치되었다면 [해당 디스크]\Users\[사용자명]\AppData\Local\Android\Sdk\platforms-tools 이 경로에 adb.exe파일이 있을것이다 커맨드 명령어를 사용해야 하는데 해당경로..
windows 10, 11 환경 변수 등록(adb.exe 환경 변수 등록하기) 커맨드 명령어로 실행되는 것들은 꼭 그 exe의 해당경로를 찾아가기 번거로운것들이 많다 환경변수에 등록해두면 어느 경로에서든 실행 할 수 있어 편하다 이번엔 Android Debug Bridge인 adb를 등록해보기로 하자 1) 윈도우 검색창에서 "환경 변수" 검색 2) 환경 변수 클릭 3) 시스템변수에서 "Path"를 찾은 뒤 편집을 누르고 새로만들기 입력 4) 위 adb.exe가 있는 path까지만 입력해 준다 5) 그 후 커맨드 창(명령 프롬포트)에서 adb를 치면 찾을 수 없다는 내용이 아닌 사용법이 나오게 된다 환경 변수 등록도 참 편해졌다 세미콜론 붙이고 시스템 설정에서 찾아들어가고 했었는데..