C++嵌套类方法

3
我想创建一个类似于这样的结构:
template <typename W>
class Graph {
public:
    struct Vertex {
        std::vector<typename Graph<W>::Vertex> next() {
            return GetNext((*this));
        }
    };
    virtual std::vector<typename Graph<W>::Vertex> GetNext(Vertex v) = 0;
};

(不要看缺少的字段等等)

我尝试过这样的代码,但是它会出现各种错误,包括语法错误或“无法实例化”,即使我尝试实例化派生类并重写GetNext。

问题是:C++中是否允许这种结构,并如何正确实现它?


Vertex 内部(因此也在 Graph<W> 内部),您可以直接使用 Vertex 而不是 typename Graph<W>::Vertex - Jarod42
1个回答

4
你的代码唯一的问题是你从 Vertex 中调用了 GetNext,但是 Vertex 没有 GetNext 成员函数。
如果你想从 Vertex 调用 Graph 的方法,则需要一个 Graph 变量来进行调用,例如一个成员变量:
struct Vertex {
    Graph& graph;

    std::vector<typename Graph<W>::Vertex> next() {
        return graph.GetNext(*this);
    }
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接