将默认构造函数更改为参数化

时间:2015-06-18 11:42:53

标签: c++

我有一个带有默认构造函数的“SetupModel”类。现在我必须在这个构造函数中包含一个参数。所以它应该是,

class SetupModel
{
public:
   SetupModel(MyData::ValueSystem& valueSystem);

所以我试图更改此类SetupModel的所有引用。

但在另一个类中,这被称为,

class  SetupManager
{
 private:
   SetupModel _model;

收到错误“没有合适的默认构造函数”

我该如何更改?

4 个答案:

答案 0 :(得分:6)

class  SetupManager
{
  SetupManager(...) : _model(valuesystemarg), ...
  {
     ...
  }
 private:
   SetupModel _model;

使用初始化列表初始化此成员。

或者将默认的无参数构造函数添加到SetupModel构造函数。

答案 1 :(得分:2)

添加默认构造函数的定义

class SetupModel
{
public:
   SetupModel(MyData::ValueSystem& valueSystem);
   SetupModel();
}

答案 2 :(得分:1)

您手头有两个选项

  1. 如果您希望在不使用参数的情况下使用默认构造函数 SetupManager的构造,您可以在SetupModel中添加一个不带参数的构造函数
  2. class SetupModel
    {
    public:
       SetupModel(MyData::ValueSystem& valueSystem);
       SetupModel() {};
    

    因此您无需在SetupManager中进行更改。

    1. 如果您更喜欢使用带有参数的SetupModel构造函数作为SetupManager的基类构造函数,则可以在SetupManager的构造函数中使用初始化列表。然后你不需要在SetupModel
    2. 进一步更改
      class  SetupManager
      {
          SetupManager(...) : _model(valuesystemarg), ...
          {
             ...
          }
      private:
           SetupModel _model;
      

答案 3 :(得分:0)

您可以拥有任意数量的构造函数,但如果您想要的只有一个,那么您可以在.h或.cpp中设置默认值

在.h:

class  SetupManager
{
    SetupManager() : _model(value), // here you can set all variables u want    separated by a coma

   private:
     SetupModel _model;
}

在cpp:

SetupManager::SetupManager():
{
   _model = value;
}

小心,所以.h中的值是"("和")"而在cpp中你使用" ="分配值