C ++从base到derived的无效转换

时间:2013-04-27 14:38:18

标签: c++ inheritance

我有一个类Board,它包含一个指针指针数组,称为Space** bo,每个指针都指向Space类的一个实例。我有一个名为SnakesAndLaddersSpace的派生类,它继承自SpaceSnakesAndLaddersBoard继承自Board

基本上,在我的SnakesAndLaddersBoard课程中,我想将其继承的Space** bo更改为SnakesAndLaddersSpace** bo,我该怎么做?

这就是我在SnakesAndLaddersBoard班级

中所做的
SnakesAndLaddersBoard::Board::Board(int w, int h)
{ 
    width=w;
    height=h;//set up the size of the board

    bo = new SnakesAndLaddersSpace*[height];  // <<-- error
    for(int i = 0; i < height; i++)
    {
        bo[i] = new SnakesAndLaddersSpace[width]; 
    }
}

这是我得到的错误

  

SnakesAndLaddersBoard.cpp | 13 |错误:从'SnakesAndLaddersSpace * '无效转换为'Space *'[-fpermissive] |

2 个答案:

答案 0 :(得分:6)

这是因为SnakesAndLaddersSpace**Space**不兼容,由于间接层次太高,它们只是无关。 当然,您仍然可以将指向SnakesAndLaddersSpace的指针分配给指向Space类型的指针,但是您不能将指针指向指向SnakesAndLaddersSpace的指针指向指向Space的指针。

bo = new Space*[height]; // look here!!!
for(int i = 0; i < height; i++)
{
    bo[i] = new SnakesAndLaddersSpace[width];
}

答案 1 :(得分:-1)

没有意义......如果你要创建一个新变量,那么你不应该调用构造函数吗? bo [i] = new SnakesAndLaddersSpace(width); ..?