1

我试图通过引用一个不同的类来传递一个变量,但我无法让它工作。

我在主应用程序中创建了一些配置对象,然后当我运行配置对话框时,我想将此配置对象提供给对话框。

这是我到目前为止所拥有的:

配置对话框.h

class ConfigDialog {

public:
    explicit ConfigDialog(kimai::Config& config, QWidget *parent = 0);

private:
    kimai::Config& config_;
};

配置对话框.cpp

ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent) {        
    config_ = config;
    // Do something with config_ - get/set values, etc.
}

当我尝试编译时,出现以下错误:

ConfigDialog.cpp:7: error: C2758: 'ConfigDialog::config_' : must be initialized in constructor base/member initializer list

知道如何解决这个问题吗?

(我尝试添加config_ = config到初始化列表,但这无效)

4

5 回答 5

3

您应该使用初始化列表来初始化引用:

ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent) 
        : config_(config)
{        
    // Do something with config_ - get/set values, etc.
}
于 2012-05-22T09:06:59.987 回答
3

您必须使用构造函数初始化程序列表:

ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent)
    : config_(config)
{
}
于 2012-05-22T09:07:01.210 回答
3

您不能通过赋值来初始化引用,它需要在初始化列表中完成:

ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent) : config_(config) {        
    // Do something with config_ - get/set values, etc.
}

config_ = config赋值是赋值运算符对被引用的值调用到被引用的config变量中config_,该变量未初始化。赋值语法仅在与声明结合使用时才有效:

int y = 5;
int &x = y;    // This works
int &z; z = y; // This does not work!
int w = 4;
x = y;         // This is an assignment to y through a reference
于 2012-05-22T09:07:18.647 回答
1

错误信息告诉你一切。尝试这个:

ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent) 
   :config_(config)
{           
    // Do something with config_ - get/set values, etc.
}

引用类型的类成员必须在初始化列表中进行初始化。

于 2012-05-22T09:07:07.787 回答
0

您应该使用构造函数语法将其添加到初始化列表中:

ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent)
    : config_ (config)
{        
    // Do something with config_ - get/set values, etc.
}
于 2012-05-22T09:07:34.063 回答