微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我搞砸了我的继承权

如何解决我搞砸了我的继承权

|| 因此,我有一个Piece类,它应该表示板上的棋子,我计划从中继承其他两个类。但是,这样做有很多问题;这是到目前为止的相关代码
///
/// PIECE CLASS HERE
/// this is an abstract class from which Barrier and Pawn inherit.

class Piece
{
public:
    Piece(Space* start);
    sf::Shape m_Circle;
protected:
    int m_X;
    int m_Y;
    int m_radius;
    Space* CurrentSpace;
};

Piece::Piece(Space* start):
    m_X(start->GetX()),m_Y(start->GetY()),m_radius(14),CurrentSpace(start)
{}

///
/// BARRIER CLASS HERE
/// these are the white stones that block a player\'s path

class Barrier : public Piece
{
public:
    Barrier(Space* initial);
    void Move(Space* target,bool isCapturing);
};

Barrier::Barrier(Space* initial)
{
    Piece(initial);
    m_Circle = sf::Shape::Circle((float)m_X,(float)m_Y,(float)m_radius,sf::Color(255,255,255));
    Move(initial);
}

void Barrier::Move(Space* target,bool isCapturing)
{
    int xChange = abs(target->GetX() - m_X);
    int yChange = abs(target->GetY() - m_Y);
    m_Circle.Move((float)xChange,(float)yChange);
    CurrentSpace.ToggleOccupied();
    if(!isCapturing)
    {
        (*target).ToggleOccupied();
    }
    CurrentSpace = target;
}
我遇到了很多我不了解的错误,尤其是:
no matching function for call to Piece::Piece()
declaration of \'Piece initial\' shadows a parameter
no matching function for call to \'Barrier::Move(Piece&)\'
request for member \'ToggleOccupied\' in \'((Barrier*)this)->Barrier::<anonymous>.Piece::CurrentSpace\',which is of non-class type \'Space*\'|
作为C ++的新手,我不了解其中的任何问题。我试图构建类似于在我以前学习C ++的书中找到的代码代码,但是显然我忽略了一些细微之处。我想调用的所有函数似乎都存在于适当的位置,我认为它们的定义值与原型中的值相同。     

解决方法

        第一个错误是由以下原因引起的:
Barrier::Barrier(Space* initial)
{
    Piece(initial);
    m_Circle = sf::Shape::Circle((float)m_X,(float)m_Y,(float)m_radius,sf::Color(255,255,255));
    Move(initial);
}
需要看起来像:
Barrier::Barrier(Space* initial) : Piece(initial)
{
    m_Circle = sf::Shape::Circle((float)m_X,255));
    Move(initial);
}
基类的构造函数在构造函数之前运行(无论如何)-如果在初始化列表中需要参数,则需要向其传递参数。 我不确定其他错误,因为我不知道它们发生在哪几行。     ,        行中的括号
Piece(initial);
被编译器忽略。您正在声明一个与参数同名的变量:
Piece initial;
要使用
initial
初始化
Piece
基础对象,必须使用成员初始化程序列表:
Barrier::Barrier(Space* initial) : Piece(initial)
同样,“ 9”函数需要两个参数,但是您只传递了一个。您忘记了布尔值。     ,        好的答案,全部。再加上最后的艰巨任务
request for member \'ToggleOccupied\' in \'((Barrier*)this)->Barrier::<anonymous>.Piece::CurrentSpace\',which is of non-class type \'Space*\'|
是由于
CurrentSpace.ToggleOccupied();
您已将CurrentSpace声明为指针,因此应为 CurrentSpace-> ToggleOccupied();     ,        如果要初始化超类,则应这样进行:
Barrier(Space* initial): 
    Piece(initial) {
    ...
}
如果您未明确初始化基类型,则编译器将尝试通过调用带有空参数列表的构造函数来初始化基类型,如下所示:
Barrier(Space* initial):
    Piece() {
    ... 
}
但是,由于您没有为Piece定义一个构造函数,该构造函数采用零参数,因此会出现您描述的编译器错误。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?