我创建了自己的类模板来维护任何类型对象的元素对。现在我将把这个模板用于另一个自己的类MyPoint。这包含一个点的3D坐标。我想我需要进一步修改,因为我的最终目标是将此PairInfor<MyPoint>
用作vector<PairInfor<MyPoint> >
并再次vector<vector<PairInfor<MyPoint> > >
。所以,我需要你的支持来修改它,因为我不知道准备这类模板。
我从其他课程和书籍中获得了助手,但我需要将最常见的功能包括在内。有人可以帮忙吗?
这是我的模板类;
// class to accomadate two values
//-------------------------------
#include <stdlib.h>
#include <iostream>
template <class Type>
class PairInfor {
private:
/// two elements of the pair
Type x[2];
public:
// Default constructor.
PairInfor() { x[0] = x[1] = -1; }
// other Constructors.
PairInfor(Type xv, Type yv) {
x[0] = xv; x[1] = yv;
}
PairInfor(const Type *v) { x[0] = v[0]; x[1] = v[1]; }
//constructor for Coping
PairInfor(const PairInfor &v) { x[0] = v.x[0]; x[1] = v.x[1]; }
// Destructor.
~PairInfor() {}
// assignament
PairInfor& operator=(const PairInfor &v)
{ x[0] = v.x[0]; x[1] = v.x[1];
return *this;
}
// Element access, for getting.
Type V1() const { return x[0]; }
// Element access, for getting.
Type V2() const { return x[1]; }
// Element access, for getting.
Type operator[] (int i) const { return x[i]; }
// Element access, for writing.
Type &V1() { return x[0]; }
// Element access, for writing.
Type &V2() { return x[1]; }
// Element access, for writing.
Type &operator[] (int i) { return x[i]; }
// Return a constant reference to the pair
const class PairInfor &infor() const { return *this; }
// Return a reference to the pair
PairInfor &infor() { return *this; }
// comparing two pair packets
friend bool operator == (const PairInfor &v1, const PairInfor &v2)
{
return v1.x[0] == v2.x[0] && v1.x[1] == v2.x[1];
}
};
当我使用此模板类时,我也会收到以下错误。
\include\PairInfor.hpp In constructor `PairInfor<Type>::PairInfor() [with Type = MyPoint]':
\myprogf.cpp instantiated from here
\include\PairInfor.hpp invalid conversion from `int' to `char*'
\include\PairInfor.hpp initializing argument 1 of `MyPoint::MyPoint(char*)'
\Makefile.win [Build Error] [myprogf.o] Error 1
如何解决此错误。是否在PairInfor中使用我的默认构造函数的错误。我该如何解决这个问题? 提前谢谢。
答案 0 :(得分:0)
以下行不适用于任何类型:
PairInfor() { x[0] = x[1] = -1; }
您正在尝试分配一个整数,但Type
可能不支持该整数。 MyPoint
没有,因此错误
您应该默认初始化您的成员:
PairInfor() : x() {}
请注意,std::pair
可能已满足您的需求。