C ++从基础到派生的无效转换[重复]
Posted
技术标签:
【中文标题】C ++从基础到派生的无效转换[重复]【英文标题】:C++ invalid conversion from base to derived [duplicate] 【发布时间】:2013-04-27 14:38:18 【问题描述】:我有一个类Board
,它包含一个指针数组,称为Space** bo
,每个指针都指向Space
类的一个实例。我有一个名为SnakesAndLaddersSpace
的派生类,它继承自Space
,而SnakesAndLaddersBoard
继承自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]|
【问题讨论】:
在哪里你得到这个错误? 13号线是哪一行?而不是用文本描述你的代码,而是取而代之的是代码,尤其是所涉及的类/变量的声明和定义。 @JoachimPileborg,来吧,这只是 sn-p 中的一个点,这种转换只有 2 个候选者。 @Lol4t0 我们无法确定这是否是有问题的线路,所以安全总比抱歉好。 如果有帮助,我把它放到了一个 pastebin 里,有很多代码,pastebin.com/pMW7RHkk 谢谢 这一行是有问题的行 "bo = new SnakesAndLaddersSpace*[height];" 【参考方案1】:那是因为SnakesAndLaddersSpace**
与Space**
不兼容,它们只是由于间接级别太高而无关。
当然,您仍然可以将指向SnakesAndLaddersSpace
的指针分配给指向Space
类型的指针,但不能将指向SnakesAndLaddersSpace
的指针分配给指向Space
的指针。
bo = new Space*[height]; // look here!!!
for(int i = 0; i < height; i++)
bo[i] = new SnakesAndLaddersSpace[width];
【讨论】:
谢谢,这似乎解决了问题,但我现在唯一遇到的另一个问题是我似乎无法调用 SnakesAndLaddersSpace 中的方法,如下pastebin.com/QQtfUp5W跨度> @user2327041,你不能从基类调用派生类中声明的函数。一般情况下,可以在基类中声明纯虚函数,在派生类中实现,但是这里看起来不太合理。否则,您可以使用static_cast
将基类转换为派生类,如果您确定,指向基类的指针包含指向派生类的指针。或者,您可能应该重新考虑您的架构以获得明确的解决方案。【参考方案2】:
这没有意义...如果您正在创建一个新变量,那么您不应该调用构造函数吗? bo[i]= new SnakesAndLaddersSpace(width); ..?
【讨论】:
不,在这种情况下,OP 正在分配width
类型为 SnakesAndLaddersSpace
的对象,并因此返回指向第一个对象的指针。在您的回答中,代码将仅使用接收整数参数的构造函数分配一个元素。如您所见,这是一件非常不同的事情。以上是关于C ++从基础到派生的无效转换[重复]的主要内容,如果未能解决你的问题,请参考以下文章
C ++没有从字符串到const char *的可行转换* [重复]
错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 C:UsersAdminist