1

我有一个带有树视图类、控制台类和选项类的程序。

我想将树视图对象传递给选项对象,并能够访问树视图内部的动态值(文件列表等)。

我试过通过引用传递,它编译,但通过一些调试消息,我可以告诉它不是同一个对象,所以值都是空的。

选项面板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;

调用Init内部main函数:

pnl_options.Init(hwnd0, pnl_console, pnl_tree);

我已经在这方面工作了很长时间(因为有些人已经阅读了我以前的问题),这非常令人沮丧。有人可以帮我完成这项工作吗?

4

2 回答 2

4

console0andtree0是通过引用传递到Init()的,但是由于 and 的类型,函数内的赋值导致参数的tree_副本console_

在此上下文中无法更改tree_and的类型,因为不是必须立即分配构造函数和引用类型(在构造函数初始值设定项列表中)。console_Init()

一种解决方案是制作类型指针并获取参数的地址。请注意,有一个生命周期要求,即所引用的对象console0必须tree0存在,只要PnlOptions需要它们。

于 2012-11-12T08:14:07.037 回答
2

从上面的代码来看,传递给 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);
于 2012-11-12T08:14:42.977 回答