有人可以告诉我为什么我收到此错误? 错误:未在此范围内声明firstpokemon。 还有另一种写作方式吗?
#include <iostream>
#include "Charmender.h"
#include "Bulbasaur.h"
#include "Game.h"
#include "Squirtle.h"
using namespace std;
int main()
{
srand(time(0));
Game game;
int frstchoice = game.getstarterchoice();
if(frstchoice == 1)
Charmender firstpokemon;
else if(frstchoice == 2)
Bulbasaur firstpokemon;
else if(frstchoice == 3)
Squirtle firstpokemon;
cout << "You chose No." << frstchoice << endl;
cout << firstpokemon.getatk();
return 0;
}
错误发生在cout&lt;&lt; firstpokemon.getatk();
答案 0 :(得分:4)
您有三个名为firstpokemon
的独立变量,每个变量都在其声明的if...else
语句的分支范围内。它们不在main
的更广泛范围内。
变量只能有一种类型。如果你想让变量引用各种多态类型(假设一个公共基类),那么你需要一个指针或引用,你通常需要动态分配:
std::unique_ptr<Pokemon> firstpokemon;
if(frstchoice == 1)
firstpokemon.reset(new Charmender);
else if(frstchoice == 2)
firstpokemon.reset(new Bulbasaur);
else if(frstchoice == 3)
firstpokemon.reset(new Squirtle);
if (firstpokemon)
cout << firstpokemon->getatk();
else
cout << "Wrong choice\n";
答案 1 :(得分:1)
if
语句中的代码在它们自己的作用域中,因此它们只在该块内部是本地的。
如果您的类继承自同一个基类,那么您可以使用指向基类的指针,并在if
语句中分配实例。
答案 2 :(得分:0)
您的firstpokemon
是一个局部变量,因为它是在if
块中创建的。
作为局部变量,不能在任何其他块中使用它,因此当您在main函数中尝试cout<<firstpokemon;
时,编译器会标记错误,因为编译器在那个时间点。