0

This is my code:

    #include <iostream>
    #include "rlutil.h"
    #include <cmath>
    #include <string>

    using namespace std;


    int getNumber()
    {
        int firstNumber;
        int secondNumber;
        cout << "Please Enter Your First Number." << endl;
        cin >> firstNumber;
        cout << "Please Enter Your Second Number." << endl;
        cin >> secondNumber;
        return 0;
    }

    int writeNumber()
    {
        getNumber();
        rlutil::setColor(3);
        cout << firstNumber + secondNumber << endl;
        return 0;
    }

When I compile it to check for errors it gives me:

/home/bresser/Documents/LearnC++/main.cpp||In function ‘int writeNumber()’:| /home/bresser/Documents/LearnC++/main.cpp|24|error: ‘firstNumber’ was not declared in this scope| /home/bresser/Documents/LearnC++/main.cpp|24|error: ‘secondNumber’ was not declared in this scope| ||=== Build finished: 2 errors, 0 warnings ===|

I kind of understand what its saying just don't understand how to fix it.

user2311215
  • 39
  • 1
  • 3
  • 10
  • 3
    The concept of scoped variables is fundamental to the language. Can you tell us what resource you are using to learn C++? If not, we can recommend [several good books](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). – Robᵩ Apr 23 '13 at 14:40

3 Answers3

2

The simplest fix is take

int firstNumber;
int secondNumber;

out of the getNumber function and give them global scope. That is, put them just under the using namespace std; line in your code.

Matt Phillips
  • 9,465
  • 8
  • 44
  • 75
1

Since you are declaring firstNumber and secondNumber inside getNumber(), writeNumber() is not able to reach them. You could do it like this (use pass by reference) if you don't want to move the variables to global scope:

void getNumber(int &firstNumber, int &secondNumber)
{
    cout << "Please Enter Your First Number." << endl;
    cin >> firstNumber;
    cout << "Please Enter Your Second Number." << endl;
    cin >> secondNumber;
}

int writeNumber()
{
    int firstNumber;
    int secondNumber;
    getNumber(firstNumber, secondNumber);
    rlutil::setColor(3);
    cout << firstNumber + secondNumber << endl;
    return 0;
}
Victor Sand
  • 2,270
  • 1
  • 14
  • 32
0

It's because the two variables (firstNumber and secondNumber) are out of scope - that is the second method can't 'see' them because they are declared in the first method.

Making these variables global will fix the problem - just move:

int firstNumber;
int secondNumber;

to the top, above your definition of getNumber().

WheretheresaWill
  • 5,882
  • 7
  • 30
  • 43