2009-12-23 175 views
0

感謝您的閱讀。 委託類被稱爲傳感器。它需要在構造函數中設置參考,如:C++類委託構造函數問題

class Sensor { Sensor(other *ref);} 

我有一個類testFactory。如果我現在鍵入

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

我得到的所有問題。它不能分配一個抽象對象。或者它不能聲明變量,或者不知道變量的類型。

即使將Sensor作爲靜態變量從頭傳入cpp,也無濟於事。

只有當我更改傳感器構造函數爲void /非構造函數,我沒有得到任何問題。

但是,我不得不在傳感器中使用setRed函數,這可能會導致更多的問題。

希望你能幫助我:聲明一個變量與一個非空的構造持有類

回答

0

有一兩件事,我可以看到的是,你的Sensor構造函數是私有的(嘗試改變classstruct或將public:在構造函數之前或聲明Sensor和包含類之間的友誼)。你應該有一個默認的構造函數,或者在包含類中實例化時提供參數。

但你顯然需要更具體以獲得更具體的答案。

0

如果您有非默認構造函數的類,編譯器將不會爲其生成默認構造函數。你也不能實例化只有私有構造函數的類。

您可以提供一個公共的默認構造函數,用一個指針的實例,或是通過公共構造函數初始化成員:

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

您需要正確初始化傳感器的實例 - 例如:

class TestFactor { 
    public: 
    TestFactor() : mySensor(0) {} 
    private: 
    Sensor mySensor; 
}; 
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; 
} 
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; 
} 

而且查找參考切片