私はPieceクラスをボード上に表現することになっています。そこから2つの他のクラスを継承する予定です。しかし、私はそうすることで多くの問題を抱えてきました。ここまでは関連するコードです。私は特に、私は理解していないエラーの負荷を取得してい私は私の遺産を台無しにしています
///
/// 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++を学ぶのに使った本の中で見つけたコードに似たコードを作ろうとしましたが、どうやら見落としてしまったようです。私が呼び出そうとしているすべての関数は、適切な場所に存在しているように見え、プロトタイプと同じ値でそれらを定義すると思います。
2番目のエラーは、クラス中の 'Piece(initial)'がローカル変数を宣言した後、 'Move(initial)'が 'Piece'の左辺値を' Barrier :: '移動機能。 –