2013-04-27 16 views
1

我有一个类Board它包含指针的指针数组,被称为Space** bo,每个指针指向Space类的实例。我有一个名为SnakesAndLaddersSpace的派生类,它继承自SpaceSnakesAndLaddersBoard,它继承自Board从基地到派生的C++无效转换

本质上,在我的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|error: invalid conversion from ‘SnakesAndLaddersSpace*’ to ‘Space*’ [-fpermissive]|

+1

**哪里有错误?哪一行是13号?而不是用文本描述你的代码,而不是用代码来代码,特别是涉及的类/变量的声明和定义。 – 2013-04-27 14:42:59

+0

@JoachimPileborg,来吧,它只是片段中的一个点,只有2个候选人发生这种转换。 – Lol4t0 2013-04-27 14:51:55

+0

@ Lol4t0我们无法确定这是否是有问题的线路,所以比对不起更安全。 – 2013-04-27 14:53:41

回答

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]; 
} 
+0

谢谢,似乎已经解决了这个问题,但我现在唯一的其他问题是,我似乎无法调用SnakesAndLaddersSpace中的方法,如下所示 http://pastebin.com/QQtfUp5W – user2327041 2013-04-27 15:18:18

+0

@ user2327041,那么你不能从基类中调用派生类中声明的函数。通常情况下,您可以在基类中声明纯虚函数并在派生类中实现它,但在这里看起来并不合理。否则,如果您确定,可以使用'static_cast'从基类转换为派生类,指向基类的指针包含指向派生的指针。或者,也许你应该重新思考你的架构以获得明确的解决方案。 – Lol4t0 2013-04-27 18:25:41

-1

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

+1

不,在这种情况下,OP将分配'SnakesAndLaddersSpace'类型的'width'对象,并返回一个指向第一个的指针。在你的答案中,代码将只使用接收整数参数的构造函数分配一个元素。你可以看到一个非常不同的东西。 – 2013-04-27 15:03:06