J'ai le code suivant pour trier un vecteur d'un type personnalisé. Il a l'habitude de fonctionner, mais après avoir construit le code sur un autre système, il donne une erreur au moment de la compilation.Initialisation non valide du type lors de l'utilisation du tri
Le contexte dans lequel l'appel sort() est effectué.
std::vector<std::vector<AssemblyObject>>* LegoAssembler::getLayers(std::vector<AssemblyObject> completeAssembly)
{
std::vector<std::vector<AssemblyObject>>* layers = new std::vector<std::vector<AssemblyObject>>();
std::vector<AssemblyObject> cLayer;
double lastZ = 0;
std::sort(completeAssembly.begin(), completeAssembly.end(), AssemblyObject::compare);
...
}
La fonction de tri
bool AssemblyObject::compare(AssemblyObject &a, AssemblyObject &b){
return (a.getPosition()[2] < b.getPosition()[2]) ||
((a.getPosition()[2] == b.getPosition()[2]) && (a.getPosition()[1] > b.getPosition()[1])) ||
((a.getPosition()[2] == b.getPosition()[2]) && (a.getPosition()[1] == b.getPosition()[1]) && (a.getPosition()[0] > b.getPosition()[0]));
}
L'erreur
/usr/include/c++/4.8/bits/stl_algo.h:2263: error: invalid initialization of reference of type ‘AssemblyObject&’ from expression of type ‘const AssemblyObject’
while (__comp(*__first, __pivot))
/usr/include/c++/4.8/bits/stl_algo.h:2263: error: invalid initialization of reference of type ‘AssemblyObject&’ from expression of type ‘const AssemblyObject’
while (__comp(*__first, __pivot))
^
^
Comme je l'ai dit, cela est arrivé après avoir construit le code sur un autre système. Je pensais que cela avait quelque chose à voir avec la modification des versions du compilateur, mais là encore, je pense que quelque chose d'aussi simple qu'une fonction de tri ne casserait pas. De plus, j'aimerais que le code compile sur les deux compilateurs si c'était le cas.
serait vraiment apprécier un peu d'aide,
* « Je pense que quelque chose d'aussi simple que d'une fonction de tri ne serait pas casser » * - Si vous n » t suivre les pré-conditions de l'algorithme, il a parfaitement le droit de rompre. En particulier, notez l'exigence du [prototype du comparateur] (http://fr.cppreference.com/w/cpp/algorithm/sort) – StoryTeller
Je ne me concentrerais pas trop sur le fait qu'il a travaillé sur un autre compilateur . Il n'est pas rare que les compilateurs acceptent des choses qu'ils ne devraient techniquement pas faire, et d'autres compilateurs ou versions ultérieures du même compilateur pourraient être plus stricts. En outre, vous devez renvoyer le vecteur des vecteurs lui-même, pas un pointeur qui a été alloué manuellement. – RyanP
@RyanP Merci pour le conseil, gardez cela à l'esprit dans le futur. –