如何通过引用将对象传递给构造函数
How to pass object by reference to a constructor
我想通过引用将对象传递给构造器,但是我遇到了问题,因为我不知道如何将其绑定到类的变量。
在这里,我发布了我的一些代码,错误出现了。
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
当我调用构造函数时,我应该这样调用吗?最短路径(图表);
您必须按以下方式更改代码:
class ShortestPath{
public:
ShortestPath(Graph& graph): graph(graph){};[...]
private:
Graph &graph;
}
或:
class ShortestPath{
public:
ShortestPath(Graph& graph): graph(&graph){};[...]
private:
Graph *graph;
}
两种可能的解决方案:
通过引用传递图形并存储指针
// note that (&graph) gets the address of the graph
ShortestPath(Graph& graph): graph(&graph) {};
通过指针传递图形并存储指针
ShortestPath(Graph* graph): graph(graph) {};
由于
您的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
};
你需要获取 Graph 对象的地址,如下所示:
class ShortestPath{
public:
ShortestPath(Graph& graph): graph(&graph){}
private:
Graph *graph;
};
相关文章:
- 对象实例化调用构造函数的次数太多
- Arduino C++在构造函数中用参数声明对象数组
- 模板,函数使用错误的构造函数来复制我的对象
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 通过构造函数创建的所有对象都具有相同的向量
- 是什么让放置新调用对象的构造函数?
- 复制包含C++所有元素的对象!(构造函数和赋值,最佳实践?
- C++ 对象指针数组的复制构造函数
- 在构造函数中输入对象时C++类成员作用域
- C++:将初始化的对象传递给另一个类的构造函数;需要不必要的构造函数吗?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 如何从构造函数副本 T(const T&)调用对象 T?
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- 如何将我编写的对象传递到另一个类的构造函数中?
- 使用向量初始化参数化构造函数的对象数组
- 在C++中将对象从另一个类传递到另一个类的构造函数?
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 构造函数对象赋值是否泄漏内存
- gcc中不可移动构造函数对象的std::函数