2013-04-23 39 views
0

塊這是我的代碼:「未聲明的範圍」在C函數++使用代碼:在Linux上

#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; 
    } 

當我編譯它來檢查錯誤,它給了我:

/家/ bresser/Documents/LearnC++/main.cpp ||在函數'int writeNumber()'中:| /home/bresser/Documents/LearnC++/main.cpp|24|error:'firstNumber'未在此範圍內聲明| /home/bresser/Documents/LearnC++/main.cpp|24|error:'secondNumber'未在此範圍內聲明| || ===構建完成:2個錯誤,0個警告=== |

我有點理解它的說法只是不明白如何解決它。

+3

範圍變量的概念是語言的基礎。你能告訴我們你用什麼資源來學習C++嗎?如果沒有,我們可以推薦[幾本好書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 – 2013-04-23 14:40:58

回答

2

最簡單的解決方法是採取

int firstNumber; 
int secondNumber; 

出getNumber功能,並給他們的全球範圍。也就是說,把它們放在代碼中的using namespace std;行下。

1

由於您在getNumber()中聲明firstNumber和secondNumber,因此writeNumber()無法訪問它們。你可以不喜歡這樣(使用pass by reference),如果你不希望將變量移動到全球範圍:

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; 
} 
0

這是因爲這兩個變量(firstNumbersecondNumber)超出範圍 - 即第二方法不能「看到」它們,因爲它們是在第一個方法中聲明的。

使這些變量的全局將解決這個問題 - 只要移動:

int firstNumber; 
int secondNumber; 

頂端,你的getNumber()上文定義。