使用自己的类模板维护元素对

时间:2012-02-21 13:08:59

标签: c++

我创建了自己的类模板来维护任何类型对象的元素对。现在我将把这个模板用于另一个自己的类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中使用我的默认构造函数的错误。我该如何解决这个问题? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

以下行不适用于任何类型:

PairInfor() { x[0] = x[1] = -1; }

您正在尝试分配一个整数,但Type可能不支持该整数。 MyPoint没有,因此错误 您应该默认初始化您的成员:

PairInfor() : x() {}

请注意,std::pair可能已满足您的需求。