如何通过引用传递对象到构造函数

时间:2013-11-02 18:51:14

标签: c++ function object reference constructor

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

在这里,我发布了一些我的代码,错误也随之增加。

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 个答案:

答案 0 :(得分:5)

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

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

或:

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

答案 1 :(得分:2)

两种可能的解决方案:

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

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

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

ShortestPath(Graph* graph): graph(graph) {};

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

由于您的graph是指向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
};