15 Common C++ Beginner Mistakes: From Compile Errors to Runtime Crashes

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. Compile-time mistakes (8)
  2. Runtime mistakes (4)
  3. Logic mistakes (3)
  4. Reading errors
  5. Summary

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

  • cin then getline: consume newline with ignore between mixed numeric and line input.
  • Empty vector operator[]: size first—use push_back or sized constructor.
  • switch fall-through: add break unless 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

  1. Missing ; after classes
  2. Missing includes
  3. Missing std::
  4. Uninitialized pointers
  5. Off-by-one indexing

Rules

  1. }; after class/struct definitions
  2. Include what you use
  3. Prefer std:: or targeted using
  4. Initialize pointers
  5. Index 0 … size-1

  • 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.