J'ai un petit problème de compilation.
Si quelqu'un pouvait m'aider.
J'ai une classe A ou je définis les operateurs =, <, >, <=, >=, ==
Dans une autre classe B, je définis un vecteur de A,
std::vector vect;
Le problème se trouve quand j'utilise la fonction de tri de :
std::sort(vect.begin(), vect.end());
J'obtiens alors le message d'erreur suivant :
------ Build started: Project: MainEngine, Configuration: Debug Win32 ------
Compiling...
main.cpp
/include/algorithm(2623) : error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const A' (or there is no acceptable conversion)
A.h(14): could be 'A &A::operator =(A)'
while trying to match the argument list '(const A, A)'
/include/algorithm(2639) : see reference to function template instantiation 'void std::_Insertion_sort1<_BidIt,A>(_BidIt,_BidIt,_Ty *)' being compiled
with
[
_BidIt=std::_Vector_const_iterator<A,std::allocator>,
_Ty=A
]
/include/algorithm(2747) : see reference to function template instantiation 'void std::_Insertion_sort<_RanIt>(_BidIt,_BidIt)' being compiled
with
[
_RanIt=std::_Vector_const_iterator<A,std::allocator>,
_BidIt=std::_Vector_const_iterator<A,std::allocator>
]
/include/algorithm(2754) : see reference to function template instantiation 'void std::_Sort<std::_Vector_const_iterator<_Ty,_Alloc>,__w64 int>(_RanIt,_RanIt,_Diff)' being compiled
with
[
_Ty=A,
_Alloc=std::allocator,
_RanIt=std::_Vector_const_iterator<A,std::allocator>,
_Diff=__w64 int
]
main.cpp(24) : see reference to function template instantiation 'void std::sort<std::_Vector_const_iterator<_Ty,_Alloc>>(_RanIt,_RanIt)' being compiled
with
[
_Ty=A,
_Alloc=std::allocator,
_RanIt=std::_Vector_const_iterator<A,std::allocator>
]
/include/algorithm(2630) : error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const A' (or there is no acceptable conversion)
A.h(14): could be 'A &A::operator =(A)'
while trying to match the argument list '(const A, const A)'
/include/algorithm(2631) : error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const A' (or there is no acceptable conversion)
A.h(14): could be 'A &A::operator =(A)'
while trying to match the argument list '(const A, A)'
Build log was saved at "file://BuildLog.htm"
MainEngine - 3 error(s), 0 warning(s)
======== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
J'ai bien défini l'operator=
A& operator = (const A& a);
Je comprends pas pourquoi le compilo attend 2 arguments (const A& lhs, A rhs) ???
Merci de votre aide.
# StlPort est ton amis
Posté par ecyrbe . Évalué à 2.
http://www.stlport.org/
stlPort est une implémentation multiplatteforme de la bibliothèque standard du c++, qui remplace allègrement les versions bugués de microsoft.
Ensuite dans les répertoire d'include prédéfinis de visual tu devras mettre les répertoires include de stlPort plus prioritaire par rapport à ceux de visual.
Ensuite recompile, et revient pour dire si ça marche mieux...
[^] # Re: StlPort est ton amis
Posté par Boris . Évalué à 2.
[^] # Re: StlPort est ton amis
Posté par ecyrbe . Évalué à 2.
Genre ta classe B se trouverait pas dans un espace de nommage?
si tu utilise dans ton .cpp qui implémente ta classe B une déclaration comme "using namespace BSpace;", alors ton problème vient de là...
Si c'est ça, à la place je pense que tu devrais encapsuler l'implémentation de ta classe dans un "namespace BSpace { .... }".
Ce qui devrais te permettre de compiler sans souçi.
Sinon, si c'est pas ça ou un truc lié aux namespaces, utilise stlPort...
[^] # Re: StlPort est ton amis
Posté par Boris . Évalué à 1.
Dans la fonction qui exécutait :
std::sort(vect.begin(), vect.end());
j'avais mis vect const :-/
Comme quoi à trop vouloir mettre des const partout...
Merci à toi Bench pour ton aide.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.