我有一组SplinePoints和InterpolatedPoints。他们的联盟必须存储在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));
}
我在结构定义中包含了运算符重载函数,但我只能删除与<
函数相关的错误。
我仍然难以消除与=
相关的错误,即:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const SplinePoints' (or there is no acceptable conversion)
请帮忙!
答案 0 :(得分:0)
尝试:
FinalInterpolatedPoints operator= (const SplinePoints &A)
也就是说,在{(1}})类型之前移动const
关键字。
答案 1 :(得分:0)
您的代码有些奇怪。将typedef
放在课程前面:
/*drop: typedef*/ struct SplinePoints {
此外,您的operator=
应返回引用,例如,
FinalInterpolatedPoints& operator= (SplinePoints const&A) {
// ^ add this!
x = A.x;
y = A.y;
return *this;
}
除此之外,您还没有提供可编辑的完整示例。如果在修复上述内容后仍有问题,请创建一个并编辑问题。