感谢您的阅读。 委托类称为传感器。它需要在构造函数中设置引用,如:
class Sensor { Sensor(other *ref);}
我有一个Class testFactory。如果我现在输入
class testFactor{
...stuff...
private:
Sensor mySensor;}
我得到了所有问题。它不能分配抽象对象。或者它不能声明变量,或者不知道变量的类型。
即使将传感器作为静态变量从头部带入cpp也无济于事。
只有将传感器构造函数更改为void / non构造函数时才会出现任何问题。
但是我必须在传感器中使用setRed函数,这可能会导致更多问题。
希望你能帮助我:声明一个带有非空构造函数的类的变量
答案 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;
}
同时查找引用切片。