我正在尝试通过引用传递一个变量到另一个类,但我无法让它工作。
我在主应用程序中创建了一些配置对象,然后当我运行配置对话框时,我想将此配置对象提供给对话框。
这是我到目前为止所做的:
ConfigDialog.h :
class ConfigDialog {
public:
explicit ConfigDialog(kimai::Config& config, QWidget *parent = 0);
private:
kimai::Config& config_;
};
ConfigDialog.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
添加到初始化列表中,但这无效)
答案 0 :(得分:3)
您应该使用初始化列表来初始化引用:
ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent)
: config_(config)
{
// Do something with config_ - get/set values, etc.
}
答案 1 :(得分:3)
您必须使用构造函数初始化列表:
ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent)
: config_(config)
{
}
答案 2 :(得分: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
答案 3 :(得分:1)
错误消息告诉你一切。试试这个:
ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent)
:config_(config)
{
// Do something with config_ - get/set values, etc.
}
引用类型的类成员必须在initialization lists中初始化。
答案 4 :(得分:0)
您应该使用构造函数语法将其添加到初始化列表中:
ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent)
: config_ (config)
{
// Do something with config_ - get/set values, etc.
}