- Learn C++ - http://www.learncpp.com -

0.7 — A few common C++ problems

In this section, we’ll address some of the common issues that new programmers seem to run across with fairly high probability. This is not meant to be a comprehensive list of compilation or execution problems, but rather a pragmatic list of solutions to very basic issues. If you have any suggestions for other issues that might be added to this list, post them in the comments section below.

Problem 1: When executing a program from the IDE, the console window blinks and then closes immediately.

Answer 1: Some compilers (eg. Bloodshed’s Dev C++) don’t automatically pause the console screen after the program has finished executing. If this is the case with your compiler, the following two steps will fix your problem:

First, add the following line near the top of your program:

Second, add the following code at the end of the main() function (right before the return statement):

This will cause your program to wait for you to press a key before continuing, which will give you time to examine your program’s output before your compiler closes the console window.

Other solutions, such as the commonly suggested system("pause") solution may only work on certain operating systems and should be avoided.

(Note: If you have questions about why 32767 is used here, that is explained in lesson 4.4b -- An introduction to std::string [1])

Note: Visual Studio will not pause at the end of a console application if it is run with debugging (Debug Menu->Start Debugging). If you want it to pause, you can either use the code solution above, or run your program without debugging (Debug Menu->Start Without Debugging).

Problem 2a: When compiling with Microsoft Visual C++, you get the following error: “c:vcprojectstest.cpp(263) :fatal error C1010: unexpected end of file while looking for precompiled header directive”
Problem 2b: When compiling with Microsoft Visual C++, your program produces compile errors, but your program doesn’t look incorrect.

Answer 2: This occurs when the Microsoft Visual C++ compiler is set to use precompiled headers (which it is by default) but one (or more) of your C++ code files does not #include the stdafx.h header as the first line. To fix this problem, simply locate the file(s) producing the error (in the above error, test.cpp is the culprit), and ensure the following line is at the very top of the file(s):

Note that for programs with multiple files, every C++ code file needs to start with this line.

Alternatively, you can turn off precompiled headers.

Problem 3: When trying to use cin, cout, or endl, the compiler says cin, cout, or endl is an “undeclared identifier”

Answer 3: First, make sure you have included the following line near the top of your file:

Second, make sure cin, cout, and endl are prefixed by “std::”. For example:

Problem 4: When trying to use endl to end a printed line, the compiler says end1 is an “undeclared identifier”

Answer 4: Make sure you do not mistake the letter l (lower case L) in endl for the number 1. endl is all letters. I recommend using a font that makes it clear the differences between the letter lower case L, upper case i, and the number 1. Also the letter capital o and the number zero can easily be confused in many non-programming fonts.

Problem 5: My program compiles but it isn’t working correctly. What do I do?

Answer 5: Debug it! You can find information on how to debug programs in lesson 1, specifically sections 1.11 -- Debugging your program (stepping and breakpoints) [2] and 1.11a -- Debugging your program (watching variables and the call stack) [3].

Problem 6: How do I turn on line numbering in Visual Studio?

Answer 6: Go to the Tools Menu, and choose Options. Under the Text Editor submenu, choose All Languages (or C/C++), and you’ll see a checkbox on the right for Line numbers.

Problem 7: When I compile my program in Visual Studio 2010, I get an error message about a COFF file being invalid. How do I fix this?

Answer 7: If you see the following error when compiling with Visual Studio 2010:

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

You’ve encountered a Microsoft OS/compiler incompatibility. It has nothing to do with your code.

The best first option is to download and install Visual Studio 2010 Service Pack 1 [4].

If that does not fix your issue, there are many other good suggestions on this Stack Overflow thread [5] about the various causes and solutions to this problem.

Problem 8: When I compile my program, I get an error about unresolved external symbol _main or _WinMain@16

Answer 8: This means your compiler can’t find your main() function. All programs must include a main() function.

There are a few things to check:
a) Does your code include a function named main?
b) Is main spelled correctly?
c) Is the file containing main part of your project? (if not, either move the main function to one that is, or add the file to your project. See lesson 1.8 -- Programs with multiple files [6] for more information about how to do this).
d) Is the file containing function main set to compile? (Also see lesson 1.8 -- Programs with multiple files [6] for more information about how to do this).

Problem 9: When I compile my program, I get a warning about “Cannot find or open the PDB file”

Answer 9: This is a warning, not an error, so it shouldn’t impact your program working. However, it is annoying. To fix it, go into the Debug menu -> Options and Settings -> Symbols, and check “Microsoft Symbol Server”.

Problem 10: I’m using Code::Blocks or g++ on the command line, and none of the C++11 functionality works

Answer 10: For Code::Blocks, go to Project->Build options->Compiler settings->Compiler flags and check “Have g++ follow C++11 ISO C++ language standard”

See lesson 0.5 -- Installing an Integrated Development Environment (IDE) [7] for pictures of how to do this.

For compiling with g++ on the command line, add the following to the command line: -std=c++11

Problem 11: I’m using Visual Studio and get the following error: “1>MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ)”

Answer 11: Most likely you’ve created the wrong type of project. Make sure you’re creating a Win32 Console Application, not a Win32 Project.

Problem 12: I ran my program and get a window but no output.

Answer 12: Your virus scanner may be blocking execution. Try disabling it temporarily and see if that’s the issue.

Problem 13: I can’t get C++11, C++14, or C++17 functionality to work with my compiler.

Answer 13: If your compiler is old, it may not support these more recent additions to the language. Best thing to do is update your compiler. Alternatively, you can try seeing if your compiler has support for these but has it turned off by default. For GCC/G++, you can try passing compiler flags -std=c++11, -std=c++14, or -std=c++17. For Code::Blocks, make sure the appropriate global compiler setting is set. We show how to do that in lesson 0.5 -- Installing an Integrated Development Environment (IDE) [7].

I have some other problem that I can’t figure out. How can I get an answer quickly?

As you progress through the material, you’ll undoubtedly have questions or run into unexpected problems. What to do next depends on your problem. But in general, there are a few things you can try.

First, ask Google. Find a good way to phrase your question and do a Google search. If you have received an error message, paste the exact message into google using quotes.
Odds are someone has already asked the same question and there is an answer waiting for you.

If that fails, ask on a Q&A board. There are websites designed for programming questions and answers, like Stack Overflow [8]. Try posting your question there. Remember to be thorough about what your problem is, and include all relevant information like what OS you’re on and what IDE you’re using.

1.1 -- Structure of a program [9]
Index [10]
0.6a -- Build configurations [11]