通过引用传递的对象未按预期工作
Object passed by reference not working as expected
我有一个带有树视图类、控制台类和选项类的程序。
我想将树视图对象传递给选项对象,并能够访问树视图内的动态值(文件列表等)。
我尝试通过引用传递,它进行了编译,但是通过一些调试消息,我可以判断它不是同一个对象,因此值都是空的。
选项面板Init
标题:
public:
void Init (HWND, PnlConsole&, PnlTree&);
...
private:
PnlTree tree_;
PnlConsole console_;
...
选项面板Init
功能:
void PnlOptions::Init(HWND hwnd0, PnlConsole& console0, PnlTree& tree0) {
tree_ = tree0;
console_ = console0;
...
main
文件中类的实例化:
PnlTree pnl_tree;
PnlOptions pnl_options;
PnlConsole pnl_console;
调用函数内部main
Init
:
pnl_options.Init(hwnd0, pnl_console, pnl_tree);
我已经为此工作了很长时间(正如有些人已经阅读了我之前的问题),这非常令人沮丧。有人可以帮助我解决这个问题吗?
console0
和tree0
通过引用传递到Init()
中,但由于tree_
和console_
的类型,函数内的辅助会导致参数的副本。
上下文中无法更改tree_
和console_
的类型Init()
因为不是构造函数,并且必须立即分配引用类型(在构造函数初始值设定项列表中)。
一种解决方案是使类型指针并获取参数的地址。请注意,存在生存期要求,即 console0
和 tree0
引用的对象必须存在,只要PnlOptions
需要它们。
从上面的代码来看,传递给 init 的pnl_console和pnl_tree似乎是结构,所以它们只会存在一段时间,当带有 Init 函数的块存在时。
在 Init 函数中,您通过 & 传递引用,但将其分配给结构。我建议,用 * 传递它
void PnlOptions::Init(HWND hwnd0, PnlConsole * console0, PnlTree * tree0)
PnlTree * pnl_tree;
PnlOptions pnl_options;
PnlConsole * pnl_console;
pnl_options.Init(hwnd0, &pnl_console, &pnl_tree);
相关文章:
- 对象指针在c++中是如何工作的
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 错误:三元运算符无法在对象中正常工作"cout"
- C++控制台应用,其中有两个冲突的对象不工作
- C++:返回本地对象,但不能正常工作
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 此类模板的对象创建如何工作?
- 返回对象如何与分配运算符一起工作
- 在删除另一个类中的一个类的对象时析构函数如何工作
- 构建对象数组是如何工作的?我被这个例子困住了
- C :删除对象(使用新的),但成员函数仍然可以正常工作(?)
- 当 std::unique_ptr 在手动删除其拥有的对象后超出范围时,它如何工作?
- 快速排序动态大量对象无法正常工作
- CPU寄存器中返回的用户定义类型的C 对象.实例方法如何工作
- 在dll中静态对象的破坏之前,要终止工作线程(但不是.exe)
- 朋友功能是否继承?为什么基类朋友功能在派生的类对象上工作
- std::共享内存中的互斥对象不工作
- 函数对象无法正常工作
- 有可能实现一个与数组而不是单个对象一起工作的内存池吗
- asio::io_service.run() 尽管工作对象退出