0

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

class Sensor { Sensor(other *ref);}

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

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

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

即使将传感器作为静态变量从标头中取出到 cpp 中也无济于事。

只有当我将传感器构造函数更改为无效/非构造函数时,我才不会遇到任何问题。

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

希望您能帮助我:声明一个变量并持有一个具有非 Void 构造函数的类

4

5 回答 5

1

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

class TestFactor {
  public:
   TestFactor() : mySensor( 0 ) {}
  private:
   Sensor mySensor;
};
于 2009-12-23T15:03:42.333 回答
1

使用 c++ 对我来说效果很好。也许你没有在 Fac 的初始化列表中声明 Sensor 的构造?

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

int b;

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

main()
{
  Fac a;
  return 0;
}
于 2009-12-23T15:05:34.077 回答
0

还有一点:如果传感器是一个抽象类,你不能创建它的实例。

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

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;
}

还要查找参考切片

于 2009-12-23T18:15:36.867 回答
0

我可以看到的一件事是您的构造函数Sensor是私有的(尝试更改classstruct或放在public:构造函数之前或声明Sensor与包含类之间的友谊)。除了它之外,您还应该有一个默认构造函数,或者在包含类中实例化它时提供参数。

但是您显然需要更具体才能获得更具体的答案。

于 2009-12-23T15:03:03.443 回答
0

如果您有具有非默认构造函数的类,则编译器不会为其生成默认构造函数。您也不能实例化只有私有构造函数的类。

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

class testFactor {
    Sensor mySensor;
public:
    testFactor() : mySensor(0) {}
};
于 2009-12-23T15:03:35.613 回答