我是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类中有问题。有人能帮忙吗?非常感谢。
答案 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;
};
编辑:如果您发布错误也会有所帮助,因为我们不知道错误是什么