15 Common C++ Beginner Mistakes: From Compile Errors to Runtime Crashes
이 글의 핵심
Top beginner pitfalls: includes and std::, linkage mismatches, array bounds, C string compares, local address returns, integer division—plus MCVE and online compilers.
When crashes appear: segmentation fault.
Introduction: “Even Hello World fails”
“The compiler prints a wall of text”
Small mistakes—one character—can trigger many follow-on errors. This guide lists fifteen frequent beginner mistakes with fixes.
You will learn:
- How to read errors from the first diagnostic
- Patterns to avoid repeating
- Core syntax rules (
;, headers,main)
Table of contents
1. Eight compile-time mistakes
1. Missing semicolon after class/struct
class MyClass {
int x;
} // error: expected ';' after class definition
class MyClass {
int x;
};
2. Missing #include
Add <iostream>, <string>, <vector>, <cmath>, <algorithm> as needed.
3. Omitting std::
Either std::cout or a using-declaration in .cpp files—not using namespace std in headers.
4. void main
Use int main() and return an int.
5. Scope of loop variables
In modern C++, for (int i=0; …) limits i to the loop unless you declare it outside intentionally.
6. const correctness
Use const std::string& for read-only string parameters so temporaries bind.
7. Array assignment after declaration
Use initializer lists, element-wise assignment, or std::vector.
8. Declaration/definition mismatch
Ensure header declarations exactly match definitions (types, const, namespaces).
2. Four runtime mistakes
9. Uninitialized pointers
Initialize nullptr, check before dereference, or use smart pointers.
10. Off-by-one loops
Use < size, range-for, or at() when unsure.
11. Comparing C strings with ==
Use strcmp or std::string.
12. Returning address of a local variable
Return by value, std::unique_ptr, or heap with clear ownership.
3. Three logic mistakes
13. = vs == in conditions
Use ==, consider Yoda conditions if (10 == x) to catch accidental assignment.
14. Integer division
Cast operands to double when you need floating-point division.
15. Unsigned underflow
Subtracting unsigned values can wrap to huge positives—use signed types or check a >= b first.
4. Reading compiler errors
Read file:line, error: vs warning:, message text, then hints. Fix the first error—later errors often cascade.
Extra pitfalls
cinthengetline: consume newline withignorebetween mixed numeric and line input.- Empty vector
operator[]: size first—usepush_backor sized constructor. switchfall-through: addbreakunless intentional.
Debugging habits
-Wall -Wextra -Werror(where practical).- MCVE: smallest file that still shows the bug.
- Online compilers (Compiler Explorer, etc.) for isolated tests.
Summary
Top five frequency
- Missing
;after classes - Missing includes
- Missing
std:: - Uninitialized pointers
- Off-by-one indexing
Rules
};after class/struct definitions- Include what you use
- Prefer
std::or targetedusing - Initialize pointers
- Index
0 … size-1
Related posts (internal)
- C++ overview
- Pointers made easy
- Environment setup
- LNK2019
Keywords
C++ beginner, compile error, expected semicolon, cout not declared, pointer initialization, array bounds
Practical tips
- Fix first error first.
- Type small examples yourself—muscle memory matters.
- Turn warnings up early.
Closing
Most early errors are predictable. Use this checklist, read diagnostics top-down, and you will spend minutes—not hours—on each issue.
Next: Pointers and vector basics.