我是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;
}
我试图编译它VC下++速成2010年。它返回以下错误消息有以下两个行:
for (int i = 0; i < length; i++)
result &= left.list[i] < right.list[i];
当我把光标放在“长度”,它报告标识符‘长度’是未定义
当我把光标放在‘左’,它返回表达式必须具有算术,枚举或指针类型
瓦时我将光标放在“list”上,它返回成员“Vector :: list is accessiblecessible。
任何人都可以提供一些帮助,并告诉我如何更正代码?非常感谢。
编辑:非常感谢。我已经解决了这个问题。看来VS 2010不起作用。我升级到2013版。现在它工作正常。在这里,我还有一个关于泛型类型实现的问题。我有以下类:
class Int
{
public:
Int(int i = 0) {this->i = i;}
private:
int i;
};
我想实现这样的主要功能这个类:
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中有什么问题。任何人都可以帮忙吗?非常感谢。
Friend函数不会继承模板参数。 – chris
@chris不正确。这与最近的clang ++和g ++编译得很好。在类定义中定义好友函数时,您可以访问类作用域的名称。 – dyp
*“当我把光标放在”*那么这些智能错误?当你编译它时,编译器的输出是什么? – dyp