2012-05-22 67 views
1

我試圖通過引用傳遞一個變量到另一個類,但我無法讓它工作。通過引用另一個類傳遞變量

我有一些配置對象,我在主應用程序中創建,然後當我運行配置對話框時,我想提供此配置對象到對話框。

這是我到目前爲止有:

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到初始化列表,但是這個無效)

回答

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

您應該使用初始化列表來初始化一個參考:

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

你必須使用一個構造函數初始化列表:

ConfigDialog::ConfigDialog(kimai::Config& config, QWidget *parent) 
    : config_(config) 
{ 
} 
+0

但不會'CONFIG_(配置)'創建一個副本時,它與聯合聲明賦值語法只能'config'? –

+0

@Laurent不,它只是複製_reference_這是你想要的。 –

1

錯誤消息告訴了你一切。嘗試:

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

引用類型的類成員必須在initialization lists被初始化。

0

你應該使用構造函數的語法將其添加到初始化列表:

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