2012-11-16 227 views
3

說我有函數指針?

class B{ //base class 

} 

class A : public B{ //derived class 
} 

我也有一個返回一個指向B類

B* returnB(){ 
    B * object = new A; //pointer of base class allocate object of derived class 
    return object; 
} 

現在,當我嘗試做一個函數指針B *的函數,我得到一個錯誤

B* (*randomFunction)(); 
randomFunction = returnB; 

Visual Studios不會編譯。

1 IntelliSense: a value of type "B*(MediaFactory::*)()" cannot be assigned to an entity of type "B*(*)()" c:\Users\...\mediafactory.cpp 35 
+0

成員函數指針與自由函數指針不同。 – chris

回答

2

你似乎試圖將指針MediaFactory類的成員函數分配到可以容納一個非成員函數的變量。這些實體不兼容。請使用boost bind或將您的函數指針變量更改爲B* (MediaFactory::*)()類型。

+0

'std :: bind'也是一個選項! – chris

+0

當你說B *(MediaFactory :: *)()。我給它起一個像B *(MediaFactory :: * randomName)() –

+0

的名字是的,只需添加類名稱範圍:'B *(MediaFactory :: * funcName)()=&MediaFactory :: funcNameInMediaFactory' – SomeWittyUsername