用typedef和std编译错误

时间:2013-03-12 08:49:19

标签: c++ visual-studio-2010 visual-studio visual-c++

我正在使用Visual Studio C ++ 2010。

我有一个Header文件,GNode.h,下面是一个snippit:

#ifndef GNODE_H
#define GNODE_H
#include <vector>

typedef vector<int> ADJNODE_LIST;

我会在第二行Error: vector is not a template

vector上收到错误消息

但是,当我将std::添加到vector时:

typedef std::vector<int> ADJNODE_LIST;

没有编译错误。

似乎无法找到<vector>库。

有人可以解释原因吗?

2 个答案:

答案 0 :(得分:3)

因为vector存在于std命名空间中。

您可以将其视为已被定义为:

namespace std {
    template<typename T, ...>
    class vector {
        ...
    };
}

您包含的文件名为vector,但是要访问您需要使用它的命名空间限定它的类型,所以std::vector<int>,其中::是范围操作符。

答案 1 :(得分:-5)

它可以,但它被名为namespace的东西所包围。

在命名空间之外(例如您的程序),您无权访问命名空间

中的元素

你可以使用

using namespace std;

或使用std::

在std命名空间中添加所有内容