C ++泛型类型实例化

时间:2014-07-13 17:40:43

标签: c++ visual-c++ intellisense

我是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类中有问题。有人能帮忙吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

此错误可能是编译器问题。

您的代码似乎使用更新的编译器(例如GCC-4.8.1)使用类似

之类的编译器进行编译
g++ -std=c++11 test.cpp

适用于Windows的GCC编译器可以从http://mingw.org/下载,并附带大多数Linux发行版。我还没试过VS2013。一般来说,MinGW和clang有更好的c ++标准支持。