2012-10-26 57 views
1

一個基類我有一個仿函數的基類和仿函數派生類,看起來像這樣:仿函數在C++

class ReadSensor 
{ 
public: 
    ReadSensor(); 
    virtual ~ReadSensor(void){} 
    virtual int operator()(void) = 0; 
}; 

class ReadSensorDummy : public ReadSensor 
{ 
public: 
    ReadSensorDummy() : x(0) {} 
    ReadSensorDummy(int x): x(x) {} 
    ~ReadSensorDummy(void) {} 
    int operator() (void) { return x;} 
private: 
    int x; 
}; 

我創造它像這樣:

ReadSensor *rs = new ReadSensorDummy(5); 

彙編,但我收到以下鏈接錯誤:

Error 2 error LNK2019: unresolved external symbol "public: __cdecl ReadSensor::ReadSensor(void)" ([email protected]@[email protected]) referenced in function "public: __cdecl ReadSensorDummy::ReadSensorDummy(int)" ([email protected]@[email protected]@Z) W:\SafetySystemTest.obj 

什麼問題?一個dynamic_cast不應該是需要的,但我確實嘗試過,並沒有幫助。

+0

如果你所有的類都提供了一個() - > int函子,爲什麼不使用std :: function? typedef std :: function ReadSensor; ReadSensor MakeReadSensorDummy(int x){return [x](){return x; }}或ReadSensor MakeComplexSensor(){ComplexState x; return [x](){return x.calculate(); }} ... – Yakk

回答

5

您已聲明打算爲ReadSensor定義構造函數,但編譯器在您的任何源文件中未找到定義。您可以嘗試定義一個空的或刪除聲明。

+0

我試着添加一個空的構造函數,但仍然有相同的鏈接錯誤。感謝您的建議。 –

+2

@Jim:你是正面的嗎? [This](http://ideone.com/u8fDTv)正常工作,因爲[this](http://ideone.com/zhfI1n),所以一定有一些你沒有展示給我們的東西。 – ildjarn

+1

@Jim,那麼你沒有正確的。更改爲構造函數的'ReadSensor(){}'爲我編譯。 – Joe