如何在这个例子中使用`const`ness?

时间:2016-10-11 19:27:59

标签: c++ constructor const

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

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_)) {}

(应该创建一个GradientDescent对象,其中包含const Graph和非const Path

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

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_) {

1 个答案:

答案 0 :(得分:1)

问题是,您的Path构造函数需要指向非const Graph的指针。

要解决此问题,只需更改构造函数声明:

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