我是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;
}
我尝试在VC ++ express 2010下编译它。它返回以下两行的以下错误消息:
for (int i = 0; i < length; i++)
result &= left.list[i] < right.list[i];
当我将光标放在“长度”上时,它报告标识符“长度”未定义
当我将光标放在“left”上时,它返回表达式必须有算术,枚举或指针类型
当我将光标放在“list”上时,它返回成员“Vector :: list is accessiblecessible。
有人可以提供帮助并告诉我如何更正代码吗?非常感谢。
编辑:非常感谢。我已经解决了这个问题。似乎VS 2010不起作用。我升级到2013版。现在工作正常。这里我有关于泛型类型实现的另一个问题。我有以下课程:
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 :(得分:0)
此错误可能是编译器问题。
您的代码似乎使用更新的编译器(例如GCC-4.8.1)使用类似
之类的编译器进行编译g++ -std=c++11 test.cpp
适用于Windows的GCC编译器可以从http://mingw.org/下载,并附带大多数Linux发行版。我还没试过VS2013。一般来说,MinGW和clang有更好的c ++标准支持。