2010-09-15 8 views
0

Mon code a eu une erreur à propos de ne pas définir le operator<. J'ai corrigé le problème operator< dans mon code en le surchargeant. Quand je compile, il n'y avait pas d'erreur mais il y a beaucoup d'erreurs sur la multi-définition. Mon code est:la définition multiple

int Vector3D::operator < (const Vector 3D &vector) const 
{ 
if(x<vector.x) 
    return 1; 
else 
    return 0; 
} 

Voici quelques-unes des lignes:

debug/src/common/propagation-delay-model_1.o: In function `empty': 
/usr/include/c++/4.1.2/limits:1044: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const' 
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here 
debug/src/common/propagation-loss-model_1.o: In function `empty': 
/usr/include/c++/4.1.2/new:94: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const' 
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here 
debug/src/common/jakes-propagation-loss-model_1.o: In function `empty': 
/usr/include/c++/4.1.2/new:94: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const' 
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here 
debug/src/common/cost231-propagation-loss-model_1.o: In function `empty': 
/usr/include/c++/4.1.2/limits:1044: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const' 
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here 
debug/src/common/spectrum-propagation-loss-model_1.o: In function `~BandInfo': 
/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/debug/ns3/type-id.h:392: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const' 
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here 
debug/src/common/friis-spectrum-propagation-loss_1.o: In function `~BandInfo': 
/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/debug/ns3/vector.h:118: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const' 
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here 
debug/src/node/spectrum-phy_1.o: In function `~TypeId': 
/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/debug/ns3/type-id.h:392: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const' 
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here 
debug/src/internet-stack/ipv6-l3-protocol_1.o: In function `new_allocator': 
/usr/include/c++/4.1.2/new:94: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const' 
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here 
debug/src/routing/olsr/olsr-routing-protocol_1.o: In function `~Association': 
/usr/include/c++/4.1.2/new:94: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const' 
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here 
debug/src/routing/olsr/test/bug780-test_1.o: In function `new_allocator': 
/usr/include/c++/4.1.2/new:94: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const' 
+0

Code S'il vous plaît .... –

+0

Veuillez poster une partie du code source d'où vous avez défini la fonction. – shuttle87

Répondre

7

On dirait que vous définissez une fonction dans un fichier d'en-tête, il se définit dans chaque fichier source qui inclut. Déclarez-le inline (ce qui permet plusieurs définitions) ou déplacez l'implémentation dans un fichier source (il n'est donc défini qu'une seule fois). EDIT: Ou déplacez la définition dans la définition de la classe, ce qui la rend également inline. (Merci David.)

+2

+1 Une autre option définit réellement la méthode dans la définition de classe, ce qui a le même effet que d'ajouter 'inline' à la définition de la méthode en dehors de la définition de la classe. –

+0

merci beaucoup. Cela a fonctionné et mon programme est ok maintenant. – bahar