在这个例子中如何使用“const”

How to use `const`ness in this example?

本文关键字:何使用 const      更新时间:2023-10-16

我有一些实现图算法的代码;特别地,有这些片段会导致问题:

class Path{
private:
    const Graph* graph;
public:
    Path(Graph* graph_) : graph(graph_) {
        ...
    }

(它应该创建一个指向a的常量指针的Path对象)图)

class GradientDescent{
private:
    const Graph graph;
public:
    Path currentPath;
    GradientDescent(const Graph& graph_) : graph(graph_), currentPath(Path(&graph_)) {}

(它应该创建一个具有const Graph和非const PathGradientDescent对象)

问题是,我只是想弄清楚如何使用const s,我得到这个错误:

error: no matching constructor for initialization of 'Path'
    GradientDescent(const Graph& graph_) : graph(graph_), currentPath(Path(&graph_)) {}
longest_path.cpp:103:9: note: candidate constructor not viable: 1st argument ('const Graph *') would lose const qualifier
    Path(Graph* graph_) : graph(graph_) {

问题是你的Path的构造函数期望一个指向非constGraph的指针。

要解决这个问题,只需修改构造函数声明:

Path(const Graph* graph_) : graph(graph_) {
    ...
}