WItam! Piszę sobie obiektowo gre w C++ z użyciem biblioteki SFML.
W pliku main.cpp kompilator pokazuje błąd: multiple definition of 'HS::data'
main.cpp
#include "game.hpp"
int main()
{ //<- dokładnie w tym miejscu
HS::Game game;
game.run();
return 0;
}
Co powinienem zrobić by obejść ten problem.
Poniżej reszta kodu:
game.hpp
#pragma once
#include <SFML/Graphics.hpp>
#include "stateLogo.hpp"
namespace HS
{
struct Data{
sf::RenderWindow window;
sf::Event event;
};
Data data;
enum StatesEnum{
logo,
exit
};
class Game{
public:
Game();
void run();
private:
///states
StatesEnum states;
StateLogo stateLogo;
int screenWidth{800};
int screenHeight{800};
};
}
game.cpp
#include "game.hpp"
namespace HS
{
Game::Game(){
data.window.create( sf::VideoMode(screenWidth, screenHeight), "HEALTHY SNAKE", sf::Style::Default);
}
void Game::run(){
while( data.window.isOpen() ){
///GAME LOOP
while( data.window.pollEvent( data.event ) ){
if( sf::Event::Closed == data.event.type ){
data.window.close();
}
}
switch( states ){
case logo:
stateLogo.run();
break;
case exit:
data.window.close();
}
}
}
}
stateLogo.hpp
#pragma once
namespace HS
{
class StateLogo{
public:
void run();
private:
void input();
void update();
void draw();
};
}
stateLogo.cpp
#include <iostream>
#include "stateLogo.hpp"
#include "game.hpp"
namespace HS
{
void StateLogo::run(){
input();
update();
draw();
}
void StateLogo::input(){
}
void StateLogo::update(){
}
void StateLogo::draw(){
data.window.clear(sf::Color::White);
std::cout<<"logos"<<std::endl;
data.window.display();
}
}