Problème de surcharge des opérateurs == et !=
Salut
Comme depuis longtemps je codes mon moteur Physique et j'ai fini la méthode différence fini. Et quand j'ai commencé à implémenter de la méthode des éléments finis je me suis rendu compte que j'ai oublié un petit détail dans la conception ce qui fait que je dois "recoder" le noyau du moteur. Et je me suis dis tant qu'à faire je devrait refaire mes classes dont je ne suis pas satisfait en commençant par Vector3D<T>...
Et dans cette classe y a la surcharge des opérateurs == et !=. Mais j'ai décidé de les définir en fonction des types avec des preprocesseurs :
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
| #define NUMERICAL 0
#if NUMERICAL == 0
#define EPSILON_CHAR 0
#define EPSILON_UCHAR 0
#define EPSILON_SHORT 0
#define EPSILON_USHORT 0
#define EPSILON_INT 0
#define EPSILON_UINT 0
#define EPSILON_LONG 0
#define EPSILON_ULONG 0
#define EPSILON_SIZE_T 0
#define EPSILON_FLOAT 0
#define EPSILON_DOUBLE 0
#define EPSILON_LONG_DOUBLE 0
#else
#define EPSILON_CHAR 1
#define EPSILON_UCHAR 1
#define EPSILON_SHORT 1
#define EPSILON_USHORT 1
#define EPSILON_INT 1
#define EPSILON_UINT 1
#define EPSILON_LONG 1
#define EPSILON_ULONG 1
#define EPSILON_SIZE_T 1
#define EPSILON_FLOAT 10*std::numeric_limits<float>;
#define EPSILON_DOUBLE 10*std::numeric_limits<double>;
#define EPSILON_LONG_DOUBLE 10*std::numeric_limits<long double>;
#endif
template <>
bool Vector3D<char>::operator==(const Vector3D<char> &v) const
{
bool ret = false;
if( cFunc::abs(x - v.x) <= EPSILON_CHAR &&
cFunc::abs(y - v.y) <= EPSILON_CHAR &&
cFunc::abs(z - v.z) <= EPSILON_CHAR)
ret = true;
return ret;
}
//...
template <>
bool Vector3D<int>::operator!=(const Vector3D<int> &v) const
{
bool ret = false;
if( iFunc::abs(x - v.x) > EPSILON_INT ||
iFunc::abs(y - v.y) > EPSILON_INT ||
iFunc::abs(z - v.z) > EPSILON_INT)
ret = true;
return ret;
}
//... |
Avec tous les types standard...
Et Func<T, I> étant ma classe qui contient plein de fonction mathématique static.
Et puis là c'est le drame !!!
Je les vois là devant moi, ces larmes, c'est triste, c'est pas du C, c'est plus plus, c'est gcc qui pleur :
Citation:
Envoyé par gcc
:: === e-Motion-Vision, Debug ===
ne\Mes documents\dossier a soufiane\e-Motion-Vision\Vector3D.h:31: warning: friend declaration `T eMV::operator*(const eMV::Vector3D<T>&, T)' declares a non-template function
ne\Mes documents\dossier a soufiane\e-Motion-Vision\Vector3D.h:31: warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning
ne\Mes documents\dossier a soufiane\e-Motion-Vision\Vector3D.h:32: warning: friend declaration `T eMV::operator*(T, const eMV::Vector3D<T>&)' declares a non-template function
ne\Mes documents\dossier a soufiane\e-Motion-Vision\Vector3D.h:34: warning: friend declaration `eMV::Vector3D<T> eMV::operator/(const eMV::Vector3D<T>&, T)' declares a non-template function
ne\Mes documents\dossier a soufiane\e-Motion-Vision\Vector3D.h:35: warning: friend declaration `eMV::Vector3D<T> eMV::operator/(T, const eMV::Vector3D<T>&)' declares a non-template function
obj\Debug\e_Motion_VisionMain.o:: In function `ZNK3eMV8Vector3DIcEeqERKS1_':C:/Documents and Settings/solène/Mes documents/dossier a soufiane/e-Motion-Vision//Vector3D.hpp:137: multiple definition of `eMV::Vector3D<char>::operator==(eMV::Vector3D<char> const&) const'
ne\Mes documents\dossier a soufiane\e-Motion-Vision\Vector3D.hpp:137: first defined here
obj\Debug\e_Motion_VisionMain.o:: In function `ZNK3eMV8Vector3DIhEeqERKS1_':C:/Documents and Settings/solène/Mes documents/dossier a soufiane/e-Motion-Vision//Vector3D.hpp:148: multiple definition of `eMV::Vector3D<unsigned char>::operator==(eMV::Vector3D<unsigned char> const&) const'
ne\Mes documents\dossier a soufiane\e-Motion-Vision\Vector3D.hpp:148: first defined here
obj\Debug\e_Motion_VisionMain.o:: In function `ZNK3eMV8Vector3DIsEeqERKS1_':C:/Documents and Settings/solène/Mes documents/dossier a soufiane/e-Motion-Vision//Vector3D.hpp:159: multiple definition of `eMV::Vector3D<short>::operator==(eMV::Vector3D<short> const&) const'
ne\Mes documents\dossier a soufiane\e-Motion-Vision\Vector3D.hpp:159: first defined here
obj\Debug\e_Motion_VisionMain.o:: In function `ZNK3eMV8Vector3DItEeqERKS1_':C:/Documents and Settings/solène/Mes documents/dossier a soufiane/e-Motion-Vision//Vector3D.hpp:170: multiple definition of `eMV::Vector3D<unsigned short>::operator==(eMV::Vector3D<unsigned short> const&) const'
Et là j'ai deux problème les warning sur les operateur friend scalaire * vector et vector*scalaire et les erreurs y en a autant que les surcharges des opérateurs == et != que faire ... ? Lol