Error Reference

This lesson serves as a comprehensive reference for common C++ errors you'll encounter when working with variables, data types, operators, expressions, and input/output. Use this as a quick lookup guide when you encounter unfamiliar error messages.

How to Use This Reference
Don't try to memorize all these errors! Bookmark this lesson and return to it when you encounter unfamiliar error messages. Use Ctrl+F (or Cmd+F on Mac) to search for keywords from your error message to quickly find relevant examples and solutions.

Variable Declaration and Initialization Errors

1. Using Uninitialized Variables

Problematic code:

#include <iostream>

int main() {
    int count;
    std::cout << count + 5 << '\n';  // Using uninitialized variable
    return 0;
}

Error message (varies by compiler):

warning: variable 'count' is uninitialized when used here

Why this happens: Local variables aren't automatically initialized to zero - they contain garbage values.

Fix: Always initialize variables when you declare them:

int count{};  // Modern initialization - defaults to 0
// or
int count = 0;  // Traditional initialization

2. Variable Name Conflicts

Problematic code:

#include <iostream>

int main() {
    int age{25};
    int age{30};  // Redeclaring the same variable
    return 0;
}

Error message:

error: redeclaration of 'int age'
note: 'int age' previously declared here

Fix: Use different variable names or update the existing variable:

int age{25};
age = 30;  // Assignment, not declaration

3. Invalid Variable Names

Problematic code:

#include <iostream>

int main() {
    int 2users = 10;  // Can't start with number
    int user-name = 5;  // Hyphens not allowed
    int class = 8;  // 'class' is a reserved keyword
    return 0;
}

Error messages:

error: expected primary-expression before 'int'

Note: This is the error you get when using a reserved keyword like 'class'. The actual error for invalid variable names starting with numbers or containing hyphens may be similar.

Fix: Follow variable naming rules:

int numUsers{10};     // Start with letter
int userName{5};      // Use camelCase or underscores
int studentClass{8};  // Avoid reserved keywords

Data Type Errors

4. Type Mismatch in Assignment

Problematic code:

#include <iostream>

int main() {
    int number = "Hello";        // String to int
    char letter = 65.5;         // Double to char
    bool flag = "true";         // String to bool
    return 0;
}

Error message:

error: invalid conversion from 'const char*' to 'int' [-fpermissive]

Note: This example shows the error for just the string-to-int conversion. Similar errors occur for the other type mismatches.

Fix: Match types correctly:

int number{42};           // int to int
char letter{'A'};         // char literal
bool flag{true};          // bool literal

5. Integer Overflow Warnings

Problematic code:

#include <iostream>

int main() {
    short smallNumber = 50000;  // Too big for short
    char grade = 300;           // Too big for char
    return 0;
}

Error messages:

warning: implicit conversion from 'int' to 'short' changes value from 50000 to -15536
warning: implicit conversion changes signedness

Fix: Use appropriate data types:

int largeNumber{50000};   // Use int for larger values
char grade{'A'};          // Use char for characters, not large numbers

Expression and Operator Errors

6. Missing Operators

Problematic code:

#include <iostream>

int main() {
    int a{5};
    int b{3};
    int result = a b;  // Missing operator between variables
    return 0;
}

Error message:

error: expected ';' before 'b'

Fix: Add the missing operator:

int result{a + b};  // Addition
int result{a * b};  // Multiplication

7. Invalid Operations on Different Types

Advanced Example
This example uses std::string which we haven't covered yet (we will!). This is for demonstration purposes, you don't need to understand strings right now.

Problematic code:

#include <iostream>

int main() {
    std::string name = "Alice";
    int age = 25;
    std::string result = name + age;  // Can't add string + int directly
    return 0;
}

Error message:

error: no operator "+" matches these operands

Fix: Convert types appropriately:

std::string result{name + std::to_string(age)};  // Convert int to string first

8. Division by Zero (Runtime Warning)

Problematic code:

#include <iostream>

int main() {
    int a{10};
    int b{0};
    int result{a / b};  // Division by zero
    std::cout << result << '\n';
    return 0;
}

Note: This compiles but causes undefined behavior at runtime.

Fix: Check for zero before dividing:

if (b != 0) {
    int result{a / b};
    std::cout << result << '\n';
} else {
    std::cout << "Error: Division by zero!" << '\n';
}

Input/Output (iostream) Errors

9. Missing std:: Prefix

Problematic code:

#include <iostream>

int main() {
    cout << "Hello World" << endl;  // Missing std:: prefix
    return 0;
}

Error message:

error: use of undeclared identifier 'cout'
error: use of undeclared identifier 'endl'

Fix: Add the std:: prefix:

std::cout << "Hello World" << '\n';

10. Wrong Stream Direction

Problematic code:

#include <iostream>

int main() {
    int age;
    std::cout >> "Enter age: ";     // Wrong direction for output
    std::cin << age;                // Wrong direction for input
    return 0;
}

Error message:

error: no match for 'operator>>' (operand types are 'std::ostream' and 'const char [12]')

Note: The actual error message is quite long and technical, but the key part is "no match for 'operator>>'" which tells you you're using the wrong operator direction.

Fix: Use correct stream directions:

std::cout << "Enter age: ";  // << for output
std::cin >> age;             // >> for input

11. Mismatched Quotes

Problematic code:

#include <iostream>

int main() {
    std::cout << "Hello World';     // Mixed quote types
    std::cout << 'Hello World";     // Wrong quote for string
    return 0;
}

Error messages:

error: missing terminating " character
warning: multi-character character constant

Fix: Use consistent quote types:

std::cout << "Hello World";   // Double quotes for strings
std::cout << 'A';             // Single quotes for single characters

Expression Statement Errors

12. Unused Expression Results

Problematic code:

#include <iostream>

int main() {
    int a{5};
    int b{3};
    a + b;  // Expression result is unused
    return 0;
}

Warning message:

warning: expression result unused

Fix: Use the result or make the intention clear:

int result{a + b};           // Store the result
std::cout << a + b << '\n';  // Use the result directly

Initialization Errors

13. Uniform Initialization Issues

Problematic code:

#include <iostream>

int main() {
    int x{3.14};  // Narrowing conversion not allowed with {}
    return 0;
}

Error message:

error: type 'double' cannot be narrowed to 'int' in initializer list

Fix: Use compatible types:

int x{3};        // Use integer literal
double x{3.14};  // Use double variable
Looking Ahead
In a future lesson, you'll learn about static_cast for explicit type conversion when you intentionally want to convert between types.

When you intentionally want to convert a type, you can use static_cast to make the conversion explicit:

int x{static_cast<int>(3.14)}; // Explicit conversion

Conditional Logic Errors

14. Assignment vs Comparison in if Statements

Problematic code:

#include <iostream>

int main() {
    int age{18};
    if (age = 21) {  // Assignment instead of comparison
        std::cout << "Can drink" << '\n';
    }
    return 0;
}

Warning message:

warning: suggest parentheses around assignment used as truth value

Fix: Use comparison operator:

if (age == 21) {  // Comparison
    std::cout << "Can drink" << '\n';
}

15. Missing Braces in if Statements

Problematic code:

#include <iostream>

int main() {
    int score{85};
    if (score > 90)
        std::cout << "Grade: A" << '\n';
        std::cout << "Excellent work!" << '\n';  // Always executes!
    return 0;
}

This compiles but doesn't work as expected.

Fix: Always use braces:

if (score > 90) {
    std::cout << "Grade: A" << '\n';
    std::cout << "Excellent work!" << '\n';
}