gpt4 book ai didi

c++ - 在 C++ 中使用抽象类作为函数的参数

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

我有一个简单的界面,为 DFS 中的图提供访问者模式

class DFSVisitor {
public:
virtual void enterVertex(DirectedGraph::VertexIndex vertex) = 0;
virtual void leaveVertex(DirectedGraph::VertexIndex vertex) = 0;
virtual void checkEdge(DirectedGraph::VertexIndex vertex, DirectedGraph::VertexIndex to) = 0;
};

我得到了使用上述类实例的函数:

void dfs(VertexIndex vertex, std::vector<bool>& used, DFSVisitor& visitor) const {
//some code
}

问题是我遇到了编译时错误:

error c2259 cannot instantiate abstract class

我知道我可以在这个类中加入一些简单的实现,即使是空体也会有所帮助,但由于审查条件,我需要有这个类的抽象。

那么我该如何避免这个问题呢?

更新:VertexIndex代码:

typedef size_t VertexIndex;

添加以澄清上面的代码。

更新感谢大家,我认识到了这个问题。在函数定义中,我只需要将引用更改为指针

void dfs(VertexIndex vertex, std::vector<bool>& used, DFSVisitor* visitor) const {
//some code
}

因为我不能使用抽象类的引用,只能使用这段代码的指针。工作。

最佳答案

看来你是按值传递VertexIndex,这涉及到对象构造。由于该类是抽象的,因此您不能这样做。

通过引用传递它,它应该可以正常工作。

关于c++ - 在 C++ 中使用抽象类作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23969426/

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