2014-03-29 145 views
0

嗨大家我想學習類和對象的基礎知識。 據我所知,我的語法是正確的,但我得到這些錯誤信息與我的計劃......初學者在c + +簡單的程序

錯誤:「A」是不是在宣告:「A」未在範圍

錯誤申報範圍

錯誤:「UIClass」的範圍未聲明

錯誤:「AgeObject」的範圍未聲明

錯誤:預期「;」前 'NameObject'

錯誤: 'NameObject' 的範圍未聲明

錯誤:預期 ';'前「ResultObject」

錯誤:「ResultObject」沒有在範圍內聲明

#include <iostream> 
#include <string> 
using namespace std; 

class UI{ 

public: 

void Age(){ 
int a; 
cout << "Age?" << endl; 
cin >> a;} 

void Name(){ 
string A; 
cout << "Name" << endl; 
cin >> A;} 

void Results(){ 
cout << "Your name is " << A << "and you are " << a << " years old." << endl; 
} 


}; 


int main() 

{ 

cout << "Enter Your Name and Age?" << endl; 

UIClass; AgeObject; 
AgeObject.Age(); 

UIClass NameObject; 
NameObject.Name(); 

UIClass ResultObject; 
ResultObject.Results(); 

return 0; 

} 
+4

嘗試刪除所有,但5-10行,並在編譯工作。然後添加更多的代碼。 –

+3

無論您使用的是哪本書或教程,我認爲您需要找到另一本書,因爲您的代碼存在太多問題,因此我不得不得出結論,無論您現在使用什麼書都不好。您可能需要檢查[The Definitive C++ Book Guide and List](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 –

+1

第一個主要問題:「using namespace std;」 - 停下來。現在就停下來,永遠不要再做。名稱空間旨在防止模糊和命名衝突。當你說「使用X」時,你將所有內容拖入全局範圍。簡單地使用std :: string,std :: cout,somenamespace :: something_else等。 – 2014-03-29 08:36:14

回答

1

所以,在結果的方法,你要訪問沒有在那裏聲明的變量。

所以,你必須:

void age() 
{ 
    // does stuff with age 
} 

void name() 
{ 
    // does stuff with name 
} 

變量只有在這些方法中存在。所以當你試圖從Results()得到它們時,你會得到一個「超出範圍」的錯誤。

所以,你可以做的是聲明四個額外的方法,setAge,setname可以其如下將在參數:

class UI 
{ 
    private: 
     int age; 
     string name; 

    public: 
     void setAge(int ag) 
     { 
      age = ag; 
     } 

     int getAge() 
     { 
      return age; 
     } 

那麼你還是你的年齡無效()方法更改爲類似這樣:

void age() 
{ 
    // Do the stuff you've already done 
    setAge(a); 
} 

然後,當你試圖讓輸出做到:

cout << "Your name is " << getName() << " and you are " << getAge() << " years old." << endl; 

而且,任何書ÿ你正在使用,他們真的應該解釋這種東西。如果沒有,我會得到一個新的。這是你用C++編寫的最基本的程序之一。

我沒有給你完整的答案,但這應該鼓勵你,並給你一個出發點。希望一切都有所幫助。

快樂編碼。

0

錯誤明確表示,變量聲明超出範圍。變量int astring A在函數內部聲明,當您嘗試使用除該函數以外的函數時,它們超出了範圍。聲明爲一個類的公共變量。你也實例化了三個UI對象來調用三個函數,你不應該那樣做,因爲每個對象都有自己的內存。實例化一個對象並調用函數。

class UI 
    { 

    public: 
    int a; 
    string A; 
    void Age() 
    { 
     //int a; remove the local varaible, 'a' can't be used outside function Name 
     cout << "Age?" << endl; 
     cin >> a; 
    } 

    void Name() 
    { 
     //string A; remove the local varaible, 'A' can't be used outside function Name 
     cout << "Name" << endl; 
     cin >> A; 
    } 

     void Results() 
     { 
     cout << "Your name is " << A << "and you are " << a << " years old." << endl; 
     } 

    }; 
+1

謝謝先生,會做出適當的修改。 – MastersProgression

0

您已經聲明aA是的NameAge方法的局部變量,因此他們不是在Results方法可用。你可能想讓它們變成成員變量。將它們的聲明移到類作用域而不是方法作用域。此外,aA是有史以來最糟糕的名字!

然後,您聲明該類的三個單獨實例(除了在類和實例名稱之間添加了分號),並且在不同的實例上調用每個方法。嘗試創建一個實例,並調用其上的所有三種方法。

哦,請請請學習如何縮進代碼...

在你的代碼
+0

Gotcha謝謝你的幫助。也大聲笑我會學習如何縮進! – MastersProgression