0

我正在为使用 STL 的地图类实现的简单图形类编写头文件。但是,我遇到了模板参数的问题,它似乎告诉我不能“没有类型”声明向量和映射对象,但我看不出我是如何不给它所需的类型的。此外,向量和地图类包含在指令中。private:被注释掉以进行测试。我觉得这是某种语法错误。

图.h

#include <iostream>
#include <cstdlib>
#include <vector>
#include <map>

template <typename T>
class Graph
{
public:
    Graph();
    Graph(const Graph<T>& other);
    Graph& operator=(const Graph<T>& other);
    ~Graph();

    vector<T> AdjacentNodes(const T& n);

//private:
    map<T, vector<T>> m;
};
4

2 回答 2

1

要使用地图和矢量类,您需要添加以下头文件

#include <map> 
#include <vector>

而且 map 和 vector 也是 std 命名空间的一部分。因此你需要使用 std::map , std::vector。

于 2013-04-26T20:24:39.423 回答
0

(以下块取自http://www.cplusplus.com/reference/map/map/,我建议您查看!)

template < class Key,                                     // map::key_type
           class T,                                       // map::mapped_type
           class Compare = less<Key>,                     // map::key_compare
           class Alloc = allocator<pair<const Key,T> >    // map::allocator_type
           >

首先,确保你把“使用命名空间标准;” 在顶部或添加 std 项目,例如地图矢量std::

其次,如上面的模板所示,如果您typename T不是std::less定义的数据类型,则需要创建自己的比较函数(可以是函数指针或函数对象)并将其作为第三个模板参数输入。

>>最后,如果您使用的是较旧的编译器,请小心输入map<T, vector<T>> m;,您需要在最后两个>'s之间包含一个空格

于 2013-04-26T20:18:53.383 回答