[SFML] Encapsulation - Undefined reference
Bonjours,
J'effectue actuellement une encapsulation de la SFML 2.0 dans le but des developpers des jeux videos en equipe d'une facon la plus modulable possible. Je compile donc cette encapsulation dans une librairie dynamique afin de ne pas avoir a tout recompiler a chaque make re.
Je vous precises que je travail sous linux.
Le probleme c'est que je me rencontre a des undefined reference lorsque je veut compiler avec ma librairie.
Voici les erreurs :
Code:
1 2 3
| ./Lib/libEngine-GDL.so: undefined reference to `EGDL::SFML::Time::setTime(sf::Time&)'
./Lib/libEngine-GDL.so: undefined reference to `EGDL::SFML::Time::~Time()'
./Lib/libEngine-GDL.so: undefined reference to `EGDL::SFML::Time::Time()' |
On peut voir que tout se situe dans Time. Je vous passe le code :
Interface ITime :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #ifndef ITIME_HPP_
# define ITIME_HPP_
namespace EGDL
{
class ITime
{
public:
virtual float asSeconds() const = 0;
virtual int asMilliseconds() const = 0;
virtual int asMicroseconds() const = 0;
};
}
#endif |
Class Header Time
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #ifndef SFMLTIME_HPP_
# define SFMLTIME_HPP_
# include "ITime.hpp"
# include <SFML/System.hpp>
namespace EGDL
{
namespace SFML
{
class Time : public ITime
{
public:
explicit Time();
virtual ~Time();
float asSeconds() const;
int asMilliseconds() const;
int asMicroseconds() const;
void setTime(sf::Time &time);
void *getTime();
Time &operator=(Time &right);
Time &operator+=(Time &left);
Time &operator-=(Time &left);
private:
sf::Time _time;
};
//Operators for Time
bool operator==(Time &left, Time &right);
bool operator!=(Time &left, Time &right);
bool operator<(Time &left, Time &right);
bool operator>(Time &left, Time &right);
bool operator<=(Time &left, Time &right);
bool operator>=(Time &left, Time &right);
Time operator+(Time &left, Time &right);
Time operator-(Time &left, Time &right);
}
namespace TIME
{
EGDL::SFML::Time milliseconds(double time);
EGDL::SFML::Time seconds(double time);
EGDL::SFML::Time microseconds(double time);
void sleep(EGDL::SFML::Time time);
}
}
#endif |
Class Source Time
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
| #include <iostream>
#include "SFMLTime.hpp"
using namespace std;
namespace EGDL
{
namespace SFML
{
Time::Time()
{
}
Time::~Time() {}
void *Time::getTime()
{
return (&_time);
}
void Time::setTime(sf::Time &time)
{
_time = time;
}
float Time::asSeconds() const
{
return (_time.asSeconds());
}
int Time::asMilliseconds() const
{
return (_time.asMilliseconds());
}
int Time::asMicroseconds() const
{
return (_time.asMicroseconds());
}
Time &Time::operator=(Time &right)
{
_time = right._time;
return (*this);
}
bool operator==(Time &left, Time &right)
{
return (*((sf::Time*)left.getTime()) == *((sf::Time*)right.getTime()));
}
bool operator!=(Time &left, Time &right)
{
return (*((sf::Time*)left.getTime()) != *((sf::Time*)right.getTime()));
}
bool operator<(Time &left, Time &right)
{
return (*((sf::Time*)left.getTime()) < *((sf::Time*)right.getTime()));
}
bool operator>(Time &left, Time &right)
{
return (*((sf::Time*)left.getTime()) > *((sf::Time*)right.getTime()));
}
bool operator<=(Time &left, Time &right)
{
return (*((sf::Time*)left.getTime()) <= *((sf::Time*)right.getTime()));
}
bool operator>=(Time &left, Time &right)
{
return (*((sf::Time*)left.getTime()) >= *((sf::Time*)right.getTime()));
}
Time operator+(Time &left, Time &right)
{
Time result;
result = left;
result += right;
return (result);
}
Time &Time::operator+=(Time &left)
{
_time += *((sf::Time*)left.getTime());
return (*this);
}
Time operator-(Time &left, Time &right)
{
Time result;
result = left;
result -= right;
return (result);
}
Time &Time::operator-=(Time &left)
{
_time -= *((sf::Time*)left.getTime());
return (*this);
}
}
namespace TIME
{
EGDL::SFML::Time milliseconds(double time)
{
Time sftime;
sf::Time tmptime;
tmptime = sf::milliseconds(time);
sftime.setTime(tmptime);
return (sftime);
}
EGDL::SFML::Time microseconds(double time)
{
Time sftime;
sf::Time tmptime;
tmptime = sf::microseconds(time);
sftime.setTime(tmptime);
return (sftime);
}
EGDL::SFML::Time seconds(double time)
{
Time sftime;
sf::Time tmptime;
tmptime = sf::seconds(time);
sftime.setTime(tmptime);
return (sftime);
}
void sleep(EGDL::SFML::Time time)
{
sf::Time sftime;
sftime = *((sf::Time*)(time.getTime()));
sleep(sftime);
}
}
} |
Je ne trouve vraiment pas d'ou viens l'erreur sachant que la librairie compile parfaitement sans erreur n'y warning.
Je vous remercie d'avance pour vos reponses.