首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一元“操作符”在C++中不定义

一元“操作符”在C++中不定义
EN

Stack Overflow用户
提问于 2018-10-20 03:28:29
回答 1查看 1.3K关注 0票数 1

一元“运算符”:“type”不定义此运算符或转换为预定义运算符可接受的类型。

在c++中使用TriMesh::VertexHandle作为map的键值时遇到了麻烦。

代码语言:javascript
复制
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()没有工作,并得到了上面的错误。

代码语言:javascript
复制
    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);
    }

我认为问题与operator++有关,所以我在头文件中添加了代码

代码语言:javascript
复制
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;
}

但是,错误仍然存在。我想知道是否有解决办法。

EN

回答 1

Stack Overflow用户

发布于 2018-10-20 03:51:40

当您以您想要的方式插入std::map时,您应该插入一个std::pair<key_type, value_type>,而不是作为一个参数的键,将一个值作为第二个参数。

以下是调用map::insert的两种方法

代码语言:javascript
复制
intvmap.insert(std::make_pair(*it, mirror));

或者使用大括号初始化器:

代码语言:javascript
复制
intvmap.insert({*it, mirror});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52902149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档