2014-03-02 55 views
0

我想我的初始化私有变量“DressMen黑”进级对话/ QTC++初始化私有变量类到另一个类

class Dialog : public QDialog 
{ 
    Q_OBJECT 

public: 

    explicit Dialog(QWidget *parent=0,DressMen b); 
    ~Dialog(); 

    ........ 



public slots: 
    ........ 



private slots: 
    ............. 

private: 

    Ui::Dialog *ui; 

    .......... 

    DressMen black; 


    .......... 

}; 

而且我DressMen类的.h是

class DressMen { 
public: 

    DressMen(); 
    ~DressMen(void); 

    DressMen(std::string name); 

    ................. 
} 

DressMen.cpp是

DressMen::DressMen() 
{ 
    //set values for default constructor 
    .................. 

} 

DressMen::DressMen(std::string name){ 

    setType(name); 

    if(name=="black1"){ 

      ...... 

    } 

} 

现在在我的对话框::对话框我想我的init BLACK1 DressMen等于私有变量 - DressMen black(“black1”);

所以我写

Dialog::Dialog(QWidget *parent,DressMen b) : QDialog(parent),ui(new Ui::Dialog),black(b("black1")) { 
..... 

} 

但是编译器错误我

dialog.h:23: error: default argument missing for parameter 2 of 'Dialog::Dialog(QWidget*, DressMen)' 
    explicit Dialog(QWidget *parent=0,DressMen b); 

我不明白,因为我在实践中C++是......

感谢

+4

如果一个函数有一个默认参数,那么它也必须具有所有后续参数的默认参数。如果你只想要一个参数有一个默认参数,那么你需要把它放在最后。 – Brian

回答

0

如Brian Bi所示,您必须指定DressMen的默认值,或者您必须让你的第一个参数DressMen。你可以做到以下几点:

class Dialog : public QDialog 
{ 
    Q_OBJECT 
public: 
    explicit Dialog(QWidget *parent=0, DressMen b = DressMen("black1")); 

    ... 
}; 

或者你可以这样做:

// Dialog.h 
class Dialog : public QDialog 
{ 
    Q_OBJECT 
public: 
    explicit Dialog(QWidget *parent=0, DressMen b = DressMen()); 

    ... 
}; 

// DressMen.h 
class DressMen 
{ 
public: 
    DressMen(std::string name = "black1"); 

    ... 
}; 

是最有意义取决于你如何指望DialogDressMen要使用的解决方案。