【发布时间】:2019-06-02 15:39:53
【问题描述】:
我正在制作一个简单的程序来根据用户选择的口袋妖怪来播放特定的战斗呼叫。我有一个主类(Pokemon 类)和两个从主类继承虚拟battleRoar() 函数的类。 这是代码
#include <iostream>
using namespace std;
class Pokemon{
public:
virtual void battleCall(){
}
virtual ~Pokemon() {}
};
class Weedle: public Pokemon{
public:
Weedle(){
cout << "Weedle Weedle!" << endl;
}
void battleCall(){
cout << "-v- weedle" << endl;
}
};
class Pikachu: public Pokemon{
public:
Pikachu(){
cout << "Pikaaaachu!" << endl;
}
void battleCall(){
cout << "pikachu!!" << endl;
}
};
int main(){
cout << "Please pick a pokemon." << endl;
cout << "1. Weedle" << endl;
cout << "2. Pikachu" << endl;
int a;
cin >> a;
if (a == 1){
cout << "You picked a weedle!" << endl;
Weedle chosenPoke;
Pokemon *p1 = &chosenPoke;
}
else if (a == 2){
cout << "You picked a pikachu!" << endl;
Pikachu chosenPoke;
Pokemon *p1 = &chosenPoke;
} else { cout << "Invalid choice" << endl;}
cout << "Would you like to hear your pokemon's battle call?" << endl;
cout << "Yes or No" << endl;
string choose;
cin >> choose;
p1->battleCall(); //produces error: use of undeclared identifier 'p1
return 0;
}
我遇到的问题是指向子类的主类指针在条件之外不再可访问。在这种情况下,我知道在条件的每个分支中调用 roar 会很简单。但是,我希望能够使用指针调用任何子类,而不是为条件的每个变体创建调用函数。
【问题讨论】:
-
您可以在 if() 之前声明
Pokemon *p1;,但p1 = &chosenPoke;不起作用,因为您正在获取一个不再存在于块外的临时地址chosenPoke;。
标签: c++ pointers conditional