2012-10-07 44 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"; 
} 

,这将直接改变的对象。

相关问题