C ++类委派构造函数问题

时间:2009-12-23 14:59:22

标签: c++ constructor delegation

感谢您的阅读。 委托类称为传感器。它需要在构造函数中设置引用,如:

class Sensor { Sensor(other *ref);}

我有一个Class testFactory。如果我现在输入

class testFactor{ ...stuff... private: Sensor mySensor;}

我得到了所有问题。它不能分配抽象对象。或者它不能声明变量,或者不知道变量的类型。

即使将传感器作为静态变量从头部带入cpp也无济于事。

只有将传感器构造函数更改为void / non构造函数时才会出现任何问题。

但是我必须在传感器中使用setRed函数,这可能会导致更多问题。

希望你能帮助我:声明一个带有非空构造函数的类的变量

5 个答案:

答案 0 :(得分:1)

您需要正确初始化Sensor实例 - 例如:

class TestFactor {
  public:
   TestFactor() : mySensor( 0 ) {}
  private:
   Sensor mySensor;
};

答案 1 :(得分:1)

使用c ++对我来说很好用。也许您没有在Fac的初始化列表中声明传感器的构造?

class Sensor { 
  public:
  Sensor(int *a)
  {
  }
};

int b;

class Fac {
  public:
  Fac():
    sensor(&b)
    {}
  private:
    Sensor sensor;
};

main()
{
  Fac a;
  return 0;
}

答案 2 :(得分:0)

我可以看到的一件事是Sensor的构造函数是私有的(尝试将class更改为struct或在构造函数之前放置public:或在{之间声明友情{1}}并包含类)。除了它之外你应该有一个默认的构造函数,或者在包含类时实例化它时提供参数。

但你显然需要更具体地获得更具体的答案。

答案 3 :(得分:0)

如果你有非默认构造函数的类,编译器就不会为它生成默认构造函数。您也无法实例化仅具有私有构造函数的类。

您可以提供公共默认构造函数,使用指向实例的指针,或者只是通过公共构造函数初始化成员:

class testFactor {
    Sensor mySensor;
public:
    testFactor() : mySensor(0) {}
};

答案 4 :(得分:0)

还有一点:如果sensor是一个抽象类,则无法创建它的实例。

大多数工厂模式都有一个抽象基类,基类的返回指针指向已分配的派生对象。

class Sensor
{
  virtual std::string get_sensor_name(void) const = 0;
};

class Fire_Sensor
  : public Sensor
{
  std::string get_sensor_name(void) const
  { return "Fire Sensor";}
};


Sensor *
Sensor_Factory::create_sensor(std::string name)
{
  if (name == "Fire Sensor")
  {
     return new Fire_Sensor;
  }
  return NULL;
}

同时查找引用切片