2012-10-07 29 views
0

嘿,我想使用的功能狼故事情節變量和IM試圖做到這一點:無法使用函數變量?錯誤表達必須有類類型

"\nYou awake on a beach to the sound of"<< Wolves().name; " starving and blood hungry," 
     "\nThere is a Rock on the ground. You pick it up"; 
     inventory.push_back("Rock"); 

但狼()的名稱;標題中提到了一個錯誤。爲什麼不能這樣做?

下面是功能狼隊代碼:

void Wolves() 
{ 
    string name = "Wolves"; 
    int health = 20; 
    hitPoints() +1; 
} 
+1

看來你需要一個類,而不是一個功能 – szx

回答

1

您不能訪問從C++中的功能之外的功能定義的變量,但你可以把它改成一個類:

class Wolves { 
    public: 
    string name; 
    // ... 

    Wolves(); // Constructor 
    //... 
} 

要訪問它,你可以使用

Wolves wolve; 
wolve.name = "whateverName"; // or set it in the constructor 
cout << wolve.name << endl; 
+0

所以我在類中聲明變量。但是當我試圖給他們一個價值。有錯誤......我也不能調用函數。 – Pendo826

+0

我添加了一個使用示例 – Nero

0

你申報的「名稱」爲被叫Wolves()函數中的局部變量,但你指的是代碼期望的功能Wolves()返回的對象有一個可訪問的成員name。這就是編譯器抱怨的原因。

你寫代碼的方式表明狼應該是一個類或結構,而不是一個函數。

1

你在那裏做的是在函數內創建局部變量。一旦函數退出,它們不再存在。你想要做的是製作一個狼隊,並創建公共成員變量來做你想做的事情。舉一個例子,

class Wolves { 
    public: 
     string name; 
     int health; 

     Wolves(string name, int a); 
} 

然後在主函數,

Wolves w("Bob", 20); 
cout << "The name is: " << w.name << endl; 

輸出「的名稱是:鮑勃」

void函數不會做任何事情,除非你傳遞值在參考中。如果你想改變通過無效函數的對象,你應該這樣做

void Wolves(Wolves & wolfToChange) 
{ 
    wolfToChange.name = "Bob"; 
} 

,這將直接改變的對象。

相關問題