gpt4 book ai didi

C++ 标识符 "_var"未定义

转载 作者:太空狗 更新时间:2023-10-29 23:47:20 27 4
gpt4 key购买 nike

我正在尝试学习 C++(目前只知道 PHP 和一些 C#)并且遇到了我的第一个问题。

我试图在开关内调用一个类,然后在开关后使用该定义的变量。但是,我收到标题中描述的错误。

#include <iostream>
#include <string>

using namespace std;

class Hero {
protected:
int hHealth,hStamina,hExp;
string hName;
public:
void Create(string);
string GetName() {
return this->hName;
}
};

class Wizard:public Hero {
public:
void SetStats(string hName) {
this->hName = hName;

this->hHealth = 40;
this->hStamina = 80;
}

};

int main() {
string hName;
int hClass;


cout << "Welcome to Ryan's Dungeons & Dragons Adventure!\n\n";
cout << "Enter your Heroes name\n";
cout << "Name: ";
cin >> hName;

cout << hName << ", please select your class\n";
cout << "(1) The Wizard\n";
cout << "(2) The Warrior\n";
cout << "(3) The Rogue\n";
cout << "(4) The Priest\n";

cout << "Class: ";
cin >> hClass;

switch (hClass) {
case 1:
Wizard _hero;
break;
}

cout << _hero->GetName();


system("PAUSE");
return 0;
}

有问题的错误发生在行上:

cout << _hero->getName();

它说 _hero 未定义。

最佳答案

_hero 仅在该 switch 语句的范围内定义。您需要在与您将要使用它们的范围相同或更高的范围内创建对象。

解决此问题的一种方法是在 switch 之前定义一个指向 Hero 的指针(初始化为 null),然后将其设置为 中的一个值开关。例如:

Wizard *_hero = NULL;
switch (hClass) {
case 1:
_hero = new Wizard();
break;
}
}

if (_hero) {
cout << _hero->GetName();
}

您还在类值上使用了 ->(而不是指向类值的指针)。除了范围问题,您可能打算编写 _hero.GetName()。在您的类中,-> 是正确的,但是因为 this 是指向您的对象的指针。

关于C++ 标识符 "_var"未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6066847/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com