使用typedef和std编译错误

Compile Error with typedef and std

本文关键字:编译 错误 std typedef 使用      更新时间:2023-10-16

我使用的是Visual Studio c++ 2010。

我有一个头文件GNode.h,下面是一个片段:

#ifndef GNODE_H
#define GNODE_H
#include <vector>
typedef vector<int> ADJNODE_LIST;

我将在第二行vector

Error: vector is not a template上得到错误

然而,当我将std::添加到vector时:

typedef std::vector<int> ADJNODE_LIST;

没有编译错误

它似乎找不到<vector>库。

有人能解释为什么吗?

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

你可以认为它被定义为:

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

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

可以,但是它被一个叫做命名空间的东西包围着。

在命名空间之外(例如你的程序),你不能访问命名空间

中的元素

可以用

using namespace std;

或者在std命名空间内加上std::