尝试使用多态出现错误

4

我正在做一个随机生成彩色块的小东西。为了组织起来,我把每个生成器(使用方法generate())放在它们自己的类中,所有这些类都是从Generator派生而来的。World类拥有Generator *集合,因此可以通过generators[randomIndex]->generate()进行调用。

//in World.h
static std::vector<Generator *> generators;

//in World.cpp
generators.push_back(&Forest());

//Generator.h
class Generator
{
public:
    virtual void generate(sf::Color ** grid, sf::Vector2i size) = 0;
};


//Forest.h
class Forest : Generator
{
public:
        void generate(sf::Color ** grid, sf::Vector2i size);
};

错误信息:

'type cast' : conversion from 'Forest *' to 'Generator *' exists, but is inaccessible

为什么会出现这个错误,如何解决?
1个回答

8

您必须使用公共继承:

class Forest : public Generator
//             ^^^^^^

我只是想知道这个错误是否适用于这种情况?如果是的话,是怎么回事呢? - Aman Deep Gautam
@AmanDeepGautam:是的。只有公共继承会向上创建“is-a”关系。 - Kerrek SB
继承策略为所有被继承的内容设定了一个标准,而默认情况下,类定义本身是私有的。因此,如果省略了“public”,就意味着“从Generator继承,但将所有内容标记为私有”。这使得“Forest”可以看到属于Generator的所有内容,但您无法从派生自Forest的类或Forest之外看到它。 - kfsone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接