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!