4

我想通过引用将对象传递给构造函数,但我遇到了问题,因为我不知道如何将它绑定到类的变量。

在这里,我发布了一些我的代码并且错误上升了。

class ShortestPath{
    public:
        ShortestPath(Graph& graph): graph(graph){};[...]
    private:
        Graph *graph; 
};

在这种情况下,错误上升是:

cannot convert `Graph' to `Graph*' in initialization 

如果我写

ShortestPath(Graph& graph): *graph(graph){};[...]

错误是

expected identifier before '*' token 

当我调用构造函数时,我应该这样调用吗?最短路径(图);

4

4 回答 4

11

您必须以这种方式更改您的代码:

class ShortestPath{
public:
    ShortestPath(Graph& graph): graph(graph){};[...]
private:
    Graph &graph; 
}

或者:

 class ShortestPath{
public:
    ShortestPath(Graph& graph): graph(&graph){};[...]
private:
    Graph *graph; 
}
于 2013-11-02T18:55:16.300 回答
2

两种可能的解决方案:

通过引用传递图形并存储指针

// note that (&graph) gets the address of the graph
ShortestPath(Graph& graph): graph(&graph) {};

通过指针传递图形并存储指针

ShortestPath(Graph* graph): graph(graph) {};
于 2013-11-02T18:55:11.537 回答
1

由于您graph是指向 a 的指针,Graph因此您应该使用以下方式(作为另一个答案):

ShortestPath(Graph& graph): graph(&graph) {};
                                  ^ // Get the pointer to object

 

但是,如果您确定传递的生命周期graph大于且等于ShortestPath' 对象的生命周期。您可以使用引用而不是指针:

class ShortestPath{
    public:
        ShortestPath(Graph& graph): graph(graph){};

    private:
        Graph &graph; 
              ^ // A reference to object
};
于 2013-11-02T19:27:16.693 回答
0

您需要获取 Graph 对象的地址,如下所示:

class ShortestPath{
    public:
        ShortestPath(Graph& graph): graph(&graph){}
    private:
        Graph *graph; 
};
于 2013-11-02T18:52:29.537 回答