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ましたが、これは無効です)

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によって参照されている値に対する代入演算子の呼び出しです。代入構文は、次の宣言と組み合わせた場合にのみ機能します。configconfig_

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 に答える