gpt4 book ai didi

c++ - 需要帮助,我不明白为什么下面的代码没有被编译

转载 作者:搜寻专家 更新时间:2023-10-31 01:21:25 25 4
gpt4 key购买 nike

头文件是“graph.h”

#ifndef _GRAPH_H_
#define _GRAPH_H_

#include <map>
#include <vector>

using namespace std;

template <class T>
class VERTEX
{
public:
VERTEX(T inVertex): m_vertex(inVertex), m_visited(false){}
~VERTEX(){}
private:
T m_vertex;
bool m_visited;
};

template <class T>
class GRAPH
{
public:
GRAPH() {}
~GRAPH(){}
typedef VERTEX<T> GRAPHVERTEX;
typedef vector<GRAPHVERTEX> ADJLIST;
typedef map<GRAPHVERTEX, ADJLIST> GRAPHMAP;

void insert(GRAPHVERTEX inSRC, GRAPHVERTEX inDST)
{
GRAPHMAP::iterator itr = m_graph.find(inSRC);
}

private:
GRAPHMAP m_graph;
};

#endif

测试文件是

#include "graph.h"

int main( int argc, char**argv)
{
GRAPH<int> *G = new GRAPH<int>();
G->insert(VERTEX<int>(0), VERTEX<int>(2));
return 0;
}

最佳答案

有两个问题。

首先,您必须在 insert 中限定依赖类型:

void insert(GRAPHVERTEX inSRC, GRAPHVERTEX inDST)
{
typename GRAPHMAP::iterator itr = m_graph.find(inSRC);
}

其次,您的顶点类需要一个 < 运算符。在 VERTEX 的公共(public)部分添加:

bool operator<(const VERTEX<T>& right) const { return m_vertex < right.m_vertex; }

作为风格问题,请注意在 C++ 中所有大写名称通常保留给常量。 Vertex对于你的类(class)来说,这将是一个更正常的名字。还要注意有 using namespace根据包含顺序, header 中的内容可能会产生许多不希望的和不可预测的结果,应该完全避免。

编辑:至少当我用 g++ 编译它时,我得到的第一个错误是关于 GRAPHMAP::iterator。当编译器看到一个可以被视为变量或类型的标识符时,它会选择默认将其解释为变量,但后来发现它实际上是一种类型。您通过使用 typename 告诉编译器它确实是一个类型关键字。

要注意的第二件事是map是有序容器,因此您需要传入比较函数或为 map 的键提供 < 运算符.自 VERTEX是 map 键,我设置了一个operator<这样就可以对对象进行排序并保持顺序。您可能需要将比较运算符调整为您的 VERTEX类进化。

关于c++ - 需要帮助,我不明白为什么下面的代码没有被编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3816811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com