一元“运算符”未在C ++中定义

时间:2018-10-20 03:28:29

标签: c++

  

一元'operator':'type'未定义此运算符或未转换为预定义运算符可接受的类型

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

Support = (0:0.01:20)';
figure 
s(1) = subplot(2,2,1)
h(1) = histogram(X,'Normalization','pdf')
xlabel('Normal')
s(2) = subplot(2,2,2)
h(2) = histogram(V,'Normalization','pdf')
xlabel('Uniform')
s(3) = subplot(2,2,3), hold on, box on
h(3) = histogram(X2,'Normalization','pdf')
plot(Support,pdf(pdX,Support),'r-','LineWidth',1.2)
xlabel('Normal (new)')
s(4) = subplot(2,2,4), hold on, box on
h(4) = histogram(V2,'Normalization','pdf')
plot(Support,pdf(pdV,Support),'r-','LineWidth',1.2)
xlabel('Uniform (new)')
xlim(s,[0 20])  

insert()无法正常工作并出现上述错误。

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);
        }
    }

我认为问题出在运算符++上,所以我将代码添加到了头文件中

    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);
    }

但是,错误仍然存​​在。 我想知道是否有解决方案。

1 个答案:

答案 0 :(得分:1)

按预期方式插入std::map时,应该插入std::pair<key_type, value_type>,而不是键作为一个参数,而值作为第二个参数。

有两种方法呼叫map::insert

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

或使用括号初始化程序:

intvmap.insert({*it, mirror});