이 섹션에서는 새로운 프로그래머가 상당히 높은 확률로 마주하게 되는 몇 가지 일반적인 문제를 다룰 것입니다. 이것은 컴파일 또는 실행 문제의 포괄적인 목록이 아니라 매우 기본적인 문제에 대한 실용적인 솔루션 목록입니다. 이 목록에 추가될 수 있는 다른 문제에 대한 제안 사항이 있으면 아래 의견 섹션에 게시하십시오.
일반적인 런타임 이슈 (General run-time issues)
Q: 프로그램 실행 시 콘솔창이 깜박이다가 바로 닫힙니다. (Q: When executing a program, the console window blinks and then closes immediately.)
먼저 다음 행을 프로그램 상단 근처에 추가하거나 확인합니다 (Visual Studio 사용자는 이러한 행이 있는 경우 #include "pch.h" 또는 #include "stdafx.h" 뒤에 나타나는지 확인하십시오).
#include <iostream>
#include <limits>
둘째, main() 함수의 끝에 다음 코드를 추가합니다(return 문 바로 앞).
std::cin.clear(); // reset any error flags
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore any characters in the input buffer until we find an enter character
std::cin.get(); // get one more char from the user
이렇게 하면 프로그램이 계속하기 전에 사용자가 키를 누를 때까지 기다리게 되어, 운영 체제가 콘솔 창을 닫기 전에 프로그램의 출력을 검사할 시간이 생깁니다.
일반적으로 제안되는 시스템("일시 중지") 솔루션과 같은 다른 솔루션은 특정 운영 체제에서만 작동할 수 있으므로 피해야 합니다.
이전 버전의 Visual Studio는 프로그램이 디버깅 시작(F5) 모드에서 실행될 때 일시 중지되지 않을 수 있습니다. 디버깅하지 않고 시작(Ctrl-F5) 모드에서 실행해 보십시오.
Q: 내 프로그램을 실행했는데 창을 열었지만 출력이 없습니다. (Q: I ran my program and get a window but no output.)
바이러스 스캐너 또는 맬웨어 방지 프로그램이 실행을 차단하고 있을 수 있습니다. 일시적으로 비활성화하고 문제인지 확인하십시오.
Q: 내 프로그램이 컴파일되지만 제대로 작동하지 않습니다. 나는 무엇을 합니까? (Q: My program compiles but it isn’t working correctly. What do I do?)
디버그! 3장의 뒷부분에서 프로그램을 진단하고 디버그하는 방법에 대한 팁이 있습니다.
일반적인 컴파일 이슈 (General compile-time issues)
Q: 내 프로그램을 컴파일할 때 확인되지 않은 외부 기호 _main 또는 _WinMain@16에 대한 오류가 발생합니다. (Q: When I compile my program, I get an error about unresolved external symbol _main or _WinMain@16)
이것은 컴파일러가 main() 함수를 찾을 수 없다는 것을 의미합니다. 모든 프로그램은 main() 함수를 포함해야 합니다.
몇 가지 확인해야 할 사항이 있습니다.
a) 코드에 main이라는 함수가 포함되어 있습니까?
b) main의 철자가 정확합니까?
c) 프로그램을 컴파일할 때 main() 함수가 포함된 파일이 컴파일되는 것이 보입니까? 그렇지 않다면 main() 함수를 있는 것으로 옮기거나 파일을 프로젝트에 추가하십시오(이 작업을 수행하는 방법에 대한 자세한 내용은 단원 2.7 -- 여러 코드 파일이 있는 프로그램(2.7 -- Programs with multiple code files)참조).
d) 콘솔 프로젝트를 생성했습니까? 새 콘솔 프로젝트를 만들어 보십시오.
Q: C++11/14/17/XX 기능을 사용하려고 하는데 작동하지 않습니다. (Q: I’m trying to use C++11/14/17/XX functionality and it doesn’t work)
컴파일러가 오래된 경우 언어에 대한 이러한 최신 추가 사항을 지원하지 않을 수 있습니다. 이 경우 컴파일러를 업그레이드하십시오.
최신 IDE/컴파일러의 경우 컴파일러가 이전 언어 표준으로 기본 설정되어 있을 수 있습니다. 언어 표준을 변경하는 방법은 단원 0.12 -- 컴파일러 구성: 언어 표준 선택(Configuring your compiler: Choosing a language standard)에서 다룹니다.
Q: cin, cout 또는 endl을 사용하려고 할 때 컴파일러에서 cin, cout 또는 endl이 '선언되지 않은 식별자'라고 말합니다. (Q: When trying to use cin, cout, or endl, the compiler says cin, cout, or endl is an ‘undeclared identifier’)
먼저 파일 상단 근처에 다음 행을 포함했는지 확인하십시오.
#include <iostream>
둘째, cin, cout 및 endl을 사용할 때마다 "std::"가 접두사로 붙는지 확인합니다. 예를 들어:
std::cout << "Hello world!" << std::endl;
이렇게 해도 문제가 해결되지 않으면 컴파일러가 오래되었거나 설치가 손상되었을 수 있습니다. 컴파일러를 최신 버전으로 다시 설치 및/또는 업그레이드해 보십시오.
Q: endl을 사용하여 인쇄된 줄을 끝내려고 할 때 컴파일러에서 end1이 '선언되지 않은 식별자'라고 말합니다. (Q: When trying to use endl to end a printed line, the compiler says end1 is an ‘undeclared identifier’)
endl의 문자 l(소문자 L)을 숫자 1로 착각하지 않도록 하십시오. endl은 모두 문자입니다. 편집기에서 소문자 L, 대문자 i 및 숫자 1의 차이점을 명확히 하는 글꼴을 사용하고 있는지 확인하십시오. 또한 문자 대문자 o와 숫자 0은 프로그래밍되지 않은 많은 글꼴에서 쉽게 혼동될 수 있습니다.
비주얼스튜디오 이슈 (Visual Studio issues)
Q: Microsoft Visual C++로 컴파일할 때 "c:\vcprojects\test.cpp(263) :fatal error C1010: 예기치 않은 파일 끝이 미리 컴파일된 헤더 지시문을 찾는 동안"과 같은 오류 메시지와 함께 치명적인 C1010 오류가 발생합니다. (Q: When compiling with Microsoft Visual C++, you get a C1010 fatal error, with an error message like "c:\vcprojects\test.cpp(263) :fatal error C1010: unexpected end of file while looking for precompiled header directive")
이 오류는 Microsoft Visual C++ 컴파일러가 미리 컴파일된 헤더를 사용하도록 설정되었지만 C++ 코드 파일 중 하나(또는 그 이상)가 코드의 첫 번째 줄로 "stdafx.h" 또는 #include "pch.h"를 #include하지 않을 때 발생합니다.
제안된 수정 사항은 미리 컴파일된 헤더를 끄는 것입니다. 이는 단원 0.7 -- 첫 번째 프로그램 컴파일에서 수행하는 방법을 보여줍니다.
미리 컴파일된 헤더를 켜진 상태로 유지하려면 이 문제를 해결하기 위해 오류를 생성하는 파일을 찾고(위 오류에서 test.cpp가 문제임) 맨 위에 다음 줄을 추가합니다. 파일:
#include "pch.h"
이전 버전의 Visual Studio는 "pch.h" 대신 "stdafx.h"를 사용하므로 pch.h로 문제가 해결되지 않으면 stdafx.h를 사용해 보세요.
여러 파일이 있는 프로그램의 경우 모든 C++ 코드 파일은 이 줄로 시작해야 합니다.
또는 미리 컴파일된 헤더를 끌 수 있습니다.
Q: Visual Studio에서 "1MSVCRTD.lib(exe_winmain.obj): 오류 LNK2019: 해결되지 않은 외부 기호 _WinMain@16이 함수 "int __cdecl invoke_main(void)"(?invoke_main@@YAHXZ)에서 참조됨" 오류를 표시합니다. (Q: Visual Studio gives the following error: "1MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)")
콘솔 응용 프로그램이 아닌 Windows 그래픽 응용 프로그램을 만들었을 가능성이 큽니다. 프로젝트를 다시 만들고 Windows(또는 Win32) 콘솔 프로젝트로 만들어야 합니다.
Q: 프로그램을 컴파일할 때 "PDB 파일을 찾거나 열 수 없습니다"라는 경고가 나타납니다.
(Q: When I compile my program, I get a warnings about "Cannot find or open the PDB file")
이것은 오류가 아니라 경고이므로 프로그램에 영향을 미치지 않아야 합니다. 그러나 그것은 성가신 일입니다. 이를 수정하려면 디버그 메뉴 -> 옵션 및 설정 -> 기호로 이동하여 "Microsoft 기호 서버"를 확인합니다.
Q: 알 수 없는 다른 문제가 있습니다. 어떻게 하면 빨리 답을 얻을 수 있습니까? (Q: I have some other problem that I can’t figure out. How can I get an answer quickly?)
자료를 진행하다 보면 의심할 여지 없이 질문이 생기거나 예상치 못한 문제에 직면하게 될 것입니다. 다음에 수행할 작업은 문제에 따라 다릅니다. 그러나 일반적으로 시도할 수 있는 몇 가지 사항이 있습니다.
먼저 구글에 물어보세요. 질문을 표현하는 좋은 방법을 찾고 Google 검색을 수행하십시오. 오류 메시지를 받은 경우 따옴표를 사용하여 정확한 메시지를 Google에 붙여넣습니다.
누군가가 이미 같은 질문을 했고 답변이 기다리고 있을 가능성이 있습니다.
그래도 안되면 Q&A 게시판에 물어보세요. Stack Overflow와 같은 프로그래밍 질문과 답변을 위해 만들어진 웹사이트가 있습니다. 거기에 질문을 올려 보세요. 사용 중인 OS 및 사용 중인 IDE와 같은 모든 관련 정보를 포함해서 문제가 무엇인지 잘 떠올려보세요.
references: https://www.learncpp.com/cpp-tutorial/a-few-common-cpp-problems/
'C++ (learncpp) > Introduction - Getting Started' 카테고리의 다른 글
0.10 — Configuring your compiler: Compiler extensions (0) | 2021.10.21 |
---|---|
0.9 — Configuring your compiler: Build configurations (0) | 2021.10.21 |
0.7 — Compiling your first program (0) | 2021.10.19 |
0.6 — Installing an Integrated Development Environment (IDE) (0) | 2021.10.19 |
0.5 — Introduction to the compiler, linker, and libraries (0) | 2021.10.18 |