0

我有一组 SplinePoints 和 InterpolatedPoints。他们的 Union 必须存储在 FinalInterpolatedPoints 中。

这是主文件:

#include <iostream>
#include <vector>
#include <conio.h>
#include <cmath>
#include <algorithm>
#include <iterator>
#include <set>

using namespace std;

typedef struct SplinePoints {
int x;
double y;
SplinePoints(int a, double b) : x(a), y(b) {

}
friend bool operator < (SplinePoints const&A, SplinePoints const&B) {
    return A.x < B.x;
}
};

typedef struct InterpolatedPoints {
int x;
double y;
InterpolatedPoints(int a, double b) : x(a), y(b) {

}
friend bool operator < (InterpolatedPoints const&A, 
                InterpolatedPoints const&B) {
    return A.x < B.x;
}
};

typedef struct FinalInterpolatedPoints {
int x;
double y;
FinalInterpolatedPoints(int a, double b) : x(a), y(b) {

}
friend bool operator < (FinalInterpolatedPoints const&A, 
                FinalInterpolatedPoints const&B) {
    return A.x < B.x;
}
FinalInterpolatedPoints operator= (SplinePoints const&A) {
    x = A.x;
    y = A.y;
    return *this;
}
FinalInterpolatedPoints operator= (InterpolatedPoints const&A) {
    x = A.x;
    y = A.y;
    return *this;
}
};

inline bool operator < (InterpolatedPoints const&A, 
                SplinePoints const&B) {
return A.x < B.x;
}

int main (int argc, char** argv) {

set <SplinePoints> set1;
set <InterpolatedPoints> set2;
set <FinalInterpolatedPoints> BaseLine;

set1.insert(SplinePoints(1,2));
set1.insert(SplinePoints(2,5));
set1.insert(SplinePoints(3,8));
set1.insert(SplinePoints(4,1.66));

set2.insert(InterpolatedPoints(5,5.768));
set2.insert(InterpolatedPoints(6,5.560));
set2.insert(InterpolatedPoints(7,5.643));
set2.insert(InterpolatedPoints(8,5.313));

set_union(set1.begin(), set1.end(), set2.begin(), set2.end(), inserter(BaseLine, BaseLine.begin()));

getch();
return 0;
}

我用这个函数来做到这一点:

set_union(set1.begin(), set1.end(), set2.begin(), set2.end(), inserter(BaseLine, BaseLine.begin()));

其中 set1、set2 和 BaseLine 分别是 SplinePoints、InterpolatedPoints 和 FinalInterpolatedPoints 类型。

当我调试程序时,我得到模板重载错误<和“=”运算符,这些运算符被引用到头文件的源文件alogrithm

template<class _InIt1,
class _InIt2,
class _OutIt> inline
_OutIt _Set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
{   // OR sets [_First1, _Last1) and [_First2, _Last2), using operator<
for (; _First1 != _Last1 && _First2 != _Last2; )
    **if (_DEBUG_LT(*_First1, *_First2))**
        {   // copy first
        ***_Dest++ = *_First1;**
        ++_First1;
        }
    **else if (*_First2 < *_First1)**
        {   // copy second
        ***_Dest++ = *_First2;**
        ++_First2;
        }
    else
        {   // advance both
        ***_Dest++ = *_First1;**
        ++_First1;
        ++_First2;
        }
_Dest = _STD copy(_First1, _Last1, _Dest);
return (_STD copy(_First2, _Last2, _Dest));
}

我在结构定义中包含了运算符重载函数,但我只能摆脱与<函数相关的错误。我仍然难以消除与=ie 相关的错误:

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const SplinePoints' (or there is no acceptable conversion)

请帮忙!

4

2 回答 2

0

尝试:

FinalInterpolatedPoints operator= (const SplinePoints &A)

也就是说,将const关键字移到类型 ( SplinePoints) 之前。

于 2013-03-26T13:32:50.220 回答
0

您的代码有些地方很奇怪。将typedef类放在前面:

/*drop: typedef*/ struct SplinePoints {

而且,你operator=的 s 应该返回一个参考,例如,

FinalInterpolatedPoints& operator= (SplinePoints const&A) {
//                     ^ add this!
    x = A.x;
    y = A.y;
    return *this;
}

除此之外,您还没有提供可编译且完整的示例。如果您在修复上述问题后仍有问题,请创建一个并编辑问题。

于 2013-03-26T13:38:25.827 回答