错误:"对象"在这方面没有申明

时间:2014-12-12 11:35:24

标签: c++ codeblocks

有人可以告诉我为什么我收到此错误? 错误:未在此范围内声明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();

3 个答案:

答案 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;时,编译器会标记错误,因为编译器在那个时间点。