C++ 通过引用将变量传递给另一个类

C++ 通过引用将变量传递给另一个类,c++,class,reference,C++,Class,Reference,我试图通过引用将一个变量传递给另一个类,但我无法让它工作 我在主应用程序中创建了一些配置对象,然后当我运行配置对话框时,我想向对话框提供这个配置对象 这就是我到目前为止所做的: ConfigDialog.h: class ConfigDialog { public: explicit ConfigDialog(kimai::Config& config, QWidget *parent = 0); private: kimai::Config& config_

我试图通过引用将一个变量传递给另一个类,但我无法让它工作

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

这就是我到目前为止所做的:

ConfigDialog.h

class ConfigDialog {

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

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

class ConfigDialog {

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

private:
    kimai::Config& config_;
};
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\uu=config
添加到初始化列表中,但这无效)

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

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

应使用初始值设定项列表初始化引用:

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

必须使用构造函数初始值设定项列表:

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

必须使用构造函数初始值设定项列表:

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

错误消息告诉了你一切。试试这个:

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

引用类型的类成员必须在错误消息中初始化。

告诉您一切。试试这个:

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

引用类型的类成员必须在中初始化。

不能通过赋值初始化引用,需要在初始值设定项列表中进行初始化:

ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent)
    : config_(config)
{
}
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

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

ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent)
    : config_(config)
{
}
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

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

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

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

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

但是
config(config)
不会创建
config
的副本吗?@Laurent不,它只是复制你想要的引用。但是
config(config)
不会创建
config
的副本吗?@Laurent不,它只是复制你想要的引用。