Я делаю ООП в C ++ впервые. Я заметил, что это очень отличается от других языков, на которых я делал ООП в прошлом.
Пока все шло отлично, но я столкнулся с проблемой, когда мне нужен конструктор для получения объекта, который я создал в качестве параметра, и по некоторым причинам он отказывается компилироваться и выдает ошибки.
Я провел глубокое исследование проблемы в Интернете, но я не вижу случаев, которые выглядят достаточно похожими на мои, и ответы на них сильно различаются. Я хотел бы найти правильный способ решения этой проблемы, чтобы я мог следовать этим соглашениям на протяжении всего моего проекта.
Вот файл заголовка, в который была выдана ошибка (Player.h):
#pragma once
// Header files
#include "Square.h"
class Player
{
private:
// Private variables
Square _position;
public:
// Public constructors declarations
Player(Square position);
// Public functions declaration
void setPosition(Square position);
Square getPosition();
};
Вот файл CPP, в который была выдана ошибка (Player.cpp):
// Header files
#include "Player.h"
// Public constructors
Player::Player(Square position) // <---------- ERROR LOCATION
{
_position = position;
}
// Public functions
void Player::setPosition(Square position)
{
_position = position;
}
Square Player::getPosition()
{
return _position;
}
На всякий случай, вот файл заголовка объекта параметра (Square.h):
#pragma once
class Square
{
private:
// Private variables
int _x;
int _y;
public:
// Public constructors declarations
Square(int x, int y);
// Public functions declaration
void setX(int x);
int getX();
void setY(int y);
int getY();
};
Здесь также находится файл CPP объекта параметра (Square.cpp)):
// Header files
#include "Square.h"
// Public constructors
Square::Square(int x, int y)
{
_x = x;
_y = y;
}
// Public functions
void Square::setX(int x)
{
_x = x;
}
int Square::getX()
{
return _x;
}
void Square::setY(int y)
{
_y = y;
}
int Square::getY()
{
return _y;
}
Вот ошибки, выданные компилятором:
В строке 4 файла 'Player.cpp':
Ошибка E0291:не существует конструктора по умолчанию для класса «Квадрат»
Ошибка C2512: «Квадрат»: нет подходящего конструктора по умолчанию, доступного