我有一组SplinePoints和InterpolatedPoints。他们的联盟必须存储在FinalInterpolatedPoints中。C++中两组结构的联合
这是主要的文件:
#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()));
,其中设置1,设置2和基线分别为类型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));
}
我包括运营商的结构定义重载函数,但我是头文件的源文件能够摆脱仅与<
功能有关的错误。 我仍然有在消除有关=
即错误:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const SplinePoints' (or there is no acceptable conversion)
请帮助困难!
检查此问题http://stackoverflow.com/questions/4331962/and-operator-overloading-problem – 999k 2013-03-26 13:39:42