SFML, GCC i podział na pliki

0

Witam!
Piszę sobię grę w SFMLu (dokładnej remake Snake'a), zacząłem i podzieliłem wszystko na plik .hpp i .cpp. Pracuję na Linux'sie Ubuntu i używam kompilatora gcc. Niestety po kompilacji i linkowaniu wszystko się wali... dodam iż dopiero zacząłem to pisać więc kod nie jest kompletny.

main.cpp :

#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <vector>
#include <cstdio>
#include <iostream>
#include "snake.hpp"

int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "Snake");
    Delta delta;
    Food food(sf::Vector2f(100, 100));
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }//while();
        window.clear();
        window.draw(food);
        window.display();
        delta.time = delta.clock.restart();
    }//while();
    return 0;
}

snake.hpp:

#ifndef snake_hpp
#define snake_hpp

#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <vector>
#include <cstdio>
#include <iostream>

class Delta
{
public:
  sf::Clock clock;
  sf::Time time;
};

class Food :public sf::Drawable
{
public:
  Food(sf::Vector2f);
  ~Food();
  void changePos(sf::Vector2f);
  sf::RectangleShape shape;
private:
  virtual void draw(sf::RenderTarget&, sf::RenderStates) const;
};

#endif

snake.cpp:

#include "snake.hpp"
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <vector>
#include <cstdio>
#include <iostream>

void Food::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
  target.draw(shape);
}
Food::Food(sf::Vector2f pos)
{
  shape.setSize(sf::Vector2f(30.f, 30.f));
  shape.setPosition(pos);
  shape.setFillColor(sf::Color::Red);
}
void Food::changePos(sf::Vector2f pos)
{
  shape.setPosition(pos);
}

Wszystko to kompiluję i linkuję z poziomu terminala:

g++ -c main.cpp
g++ -c snake.cpp
g++ main.o snake.o -o game -lsfml-graphics -lsfml-window -lsfml-system

To błąd który otrzymuję przy próbie linkowania:

main.o: In function main': main.cpp:(.text+0x227): undefined reference to Food::~Food()'
main.cpp:(.text+0x2a0): undefined reference to Food::~Food()' snake.o: In function Food::Food(sf::Vector2<float>)':
snake.cpp:(.text+0x5e): undefined reference to `vtable for Food'
collect2: error: ld returned 1 exit status

Z góry dziękuję za pomoc!

3

Zadeklarowałeś destruktor klasy Food ale nigdzie go nie implementujesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1