具有自定义类的C ++泛型类型实现

时间:2014-07-13 19:14:39

标签: c++

我是C ++的新手并且正在进行锻炼。我有以下C ++代码:

template <typename T, int length>
class Vector
{
    public:
        Vector(T values[length])
        {
            for (int i = 0; i < length; i++)
            list[i] = values[i];
        }
        friend bool operator<(const Vector<T, length>& left,
            const Vector<T, length>& right)
        {
            bool result = true;
            for (int i = 0; i < length; i++)
            result &= left.list[i] < right.list[i];
            return result;
        }
    private:
    T list[length];
    };


    int main()
    {
        int first[] = {1, 2}, second[] = {2, 3}; 
        Vector<int, 2> vector1(first), vector2(second);
        cout << (vector1 < vector2) << endl;
        return 0;
    }

我有一个类Int:

class Int
{
public:
    Int(int i = 0) {this->i = i;}
private:
    int i;
};

我试图在main函数中实现这个类,如下所示:

int main()
{
    Int first[] = {Int(1), Int(2)}, second[] = {Int(2), Int(3)}; 
    Vector<Int, 2> vector1(first), vector2(second);
    cout << (vector1 < vector2) << endl;
    return 0;
}

它无法编译。我猜Int类中有问题。有人能帮忙吗?非常感谢。

2 个答案:

答案 0 :(得分:1)

问题是,您在operator<模板中Vector的实施在<类型中使用了T。如果您使用Vector实例化int,那么这不是问题,因为内置int比较。但是,如果使用Vector类(未定义Int)实例化<,则编译器不知道该行中该做什么

result &= left.list[i] < right.list[i];

答案 1 :(得分:0)

我不确定你是否可以在构造函数中使用* this,因为它仍然没有创建对象。更合适的方法是:

class Int {
    public:
        Int(int i = 0) I(i) {}
    private:
        int I;
};

编辑:如果您发布错误也会有所帮助,因为我们不知道错误是什么