gpt4 book ai didi

c++ - 如何实现类模板的前向声明

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

我正在尝试使用嵌套类 VertexEdge 创建一个 Graph 类。我想让我的 Vertex 类接受通用参数。我已经向前声明了我的 Vertex 类,以便我可以在我的 Edge 类中使用它。

当我使用模板时,我遇到了一些我不确定如何解决的错误。

这是我尝试过的。每行旁边的错误都被注释掉了。

class Graph
{
private:
template <class T>
class Vertex; // Forward Declaration

template <class T>
vector<Vertex<T> > vertices; // Err: member 'vertices' declared as a template

class Edge
{
public:
template <class T>
Vertex<T>& _orig; // Err: member '_orig' declared as a template

template <class T>
Vertex<T>& _dest; // Err: member '_dest' declared as a template

template <class T>
Edge(Vertex<T>& orig, Vertex<T>& dest) : _orig(orig), // Err: member initializer '_orig' does not name a non-static data member or base class
_dest(dest) { }

template <class T>
Vertex<T>& getOrig() { return _orig; } // Err: use of undeclared identifier '_orig'

template <class T>
Vertex<T>& getDest() { return _dest; } // Err: use of undeclared identifier '_dest'
};

template <typename T>
class Vertex
{
public:
T _data;
vector<Edge> _edges;

Vertex(T data) : _data(data) { }

void addEdgeToVertex(Edge& edge)
{
_edges.push_back(edge);
}
};

public:
template <typename T>
void addEdge(Vertex<T>& orig, Vertex<T>& dest)
{
Edge edge(orig, dest);
orig.addEdgeToVertex(edge);
dest.addEdgeToVertex(edge);
}
};

你能帮我指出我做错了什么吗?我该如何修复此代码?

最佳答案

前向声明看起来不错。问题是你不能声明“模板成员变量”,你怎么能为他们指定模板参数呢?

您应该改为制作类模板。

template <class E>
class Graph
{
private:
template <class T>
class Vertex; // Forward Declaration

vector<Vertex<E> > vertices;
...
};

Edge 类也一样。

LIVE

关于c++ - 如何实现类模板的前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39095527/

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