unaire « opérateur » ne définit pas en C ++

voix
0

unaire « opérateur »: « type » ne définit pas cet opérateur ou une conversion en un type acceptable pour l'opérateur prédéfini

Vous avez une difficulté lors de l'utilisation TriMesh :: VertexHandle comme valeur de clé de carte en c ++.

map<TriMesh::VertexHandle, TriMesh::VertexHandle> intvmap;
    for (vector<TriMesh::VertexHandle>::iterator it = oldVertices.begin(); it != oldVertices.end(); ++it){

        bool isInternal = mesh.property(vIsInternal, *it);
        if (isInternal) {
            TriMesh::Point pos = mesh.point(*it);
            TriMesh::VertexHandle mirror = mesh.add_vertex(pos - z * 2 * mesh.property(vHeight, *it));
            mesh.property(vHeight, mirror) = -mesh.property(vHeight, *it);
            mesh.property(vIsInternal, mirror) = true;
            intvmap.insert((*it), mirror);
        }
    }

insert () ne fonctionnait pas et obtenu l'erreur ci-dessus.

    template<class _Iter>
    void insert(_Iter _First, _Iter _Last)
    {   // insert [_First, _Last) one at a time
    _DEBUG_RANGE(_First, _Last);
    for (; _First != _Last; ++_First)

        emplace_hint(end(), *_First);
    }

Je pense que le problème est sur l'opérateur ++, donc j'ajouter le code dans le fichier d'en-tête

TriMesh::VertexHandle& operator++(TriMesh::VertexHandle& vh){ //++A
    vh.__increment();
    return vh;
}
TriMesh::VertexHandle operator++(TriMesh::VertexHandle & p_oRight, int) // A++
{
    TriMesh::VertexHandle & copy = p_oRight;
    copy.__increment();
    return copy;
}

Cependant, l'erreur existe toujours. Je voudrais savoir s'il y a une solution.

Créé 20/10/2018 à 03:28
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Lorsque vous insérez dans une std::mapdans la façon dont vous l' intention, vous devriez insérez une std::pair<key_type, value_type>, et non une clé comme un argument, et une valeur comme second argument.

Voici deux façons d'appeler map::insert:

intvmap.insert(std::make_pair(*it, mirror));

ou utilisez la initialiseur accolade:

intvmap.insert({*it, mirror});
Créé 20/10/2018 à 03:51
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more