В классе Star
объявлено несколько функций:
Star(float m, float r, float X, float Y, HTEXTURE);
float getMass();
float getRadius();
float getX();
float getY();
И вы пытаетесь использовать некоторые из них без предоставления определения , то есть тела функции, поэтому вы получаете эти ошибки компоновщика.
Добавьте новый файл .cpp в ваш проект с именем Star.cpp
(хотя имя не имеет значения) и добавьте определения функций для класса Star
, как вы это сделали для класса Projectile
, (Вы можете просто добавить их в любой файл .cpp в вашем проекте, например, Projectile.cpp
, но если у вас есть отдельный заголовочный файл, хорошо также иметь отдельный файл .cpp.)
Или, если вы не хотите, чтобы в вашем проекте был другой файл cpp, вы можете поместить тела функций в сам класс:
class Star
{
private:
float mass, radius, x, y;
hgeQuad quad;
public:
Star(float m, float r, float X, float Y, HTEXTURE);
float getMass() { return mass; }
float getRadius() { return radius; }
float getX() { return x; }
float getY() { return y; }
Star() {}
};
Этот стиль является общим для небольших функций-получателей, таких как getMass
, getRadius
и т. Д., Которые просто возвращают переменную-член.
<ч />
Хотя это не имеет прямого отношения к вашему вопросу, я должен отметить несколько вещей:
Создайте все свои функции "получения" (например, getMass
и т. Д.) const
(чтобы их можно было использовать на const Star
объектах), поставив слово const
после параметров (* 1030) * в данном случае) вот так: float getMass() const { return mass; }
Поскольку у вас есть переменные-члены в классе Star
, вы должны установить для них разумное значение по умолчанию в конструкторе, которое не принимает параметров,
как это:
Star() : mass(0), radius(0), x(0), y(0) {}
Что будет устанавливать mass
, radius
, x
и y
на 0
. (Этот необычный синтаксис называется список инициализаторов . Вы можете прочитать о них здесь .)
Вы даже можете сделать это без отдельного конструктора, используя аргументы по умолчанию:
Star(float m = 0, float r = 0, float X = 0, float Y = 0, HTEXTURE = 0);