2013-11-28 40 views
0

這個工程:'的className '並不是指一個值' 與make_shared

shared_ptr<ofxDTangibleBase> sp(new ofxDTangibleBase(colorBlob, "ofxDTangibleBase", detectColor, workImg)); 

但是,如果我有make_shared做到這一點:

shared_ptr<ofxDTangibleBase> sp = make_shared<ofxDTangibleBase>(colorBlob, "ofxDTangibleBase", detectColor, workImg); 

我得到'ofxDTangibleBase」並非指到值' 我已經找了一個修復程序,但我發現像有很多參數等問題的人

我忽略了什麼嗎?

編輯:

的構造是這樣的:

和類擴展了另一個類:

class ofxDTangibleBase : public ofxCvBlob { 
+0

'ofxDTangibleBase'的構造函數是什麼樣的? – woolstar

+0

你對共享指針使用'std'或'boost'嗎?當你顯式限定(例如'std :: shared_ptr'和'std :: make_shared')時會發生什麼? – Angew

回答

0

很難說,也許儘量減少代碼,看看是否這有助於澄清更小的測試案例。例如。這是在你的例子之後構建的,編譯得很好。你有沒有正確的聲明可見?也許有些事情是前瞻性的,儘管這不應該成爲一個問題。

#include <memory> 

class CHorse 
{ 
public: 
    CHorse() 
    { 
    } 
    CHorse(const CHorse& Horse) 
    { 
    } 
}; 

class CSlowHorse : public CHorse 
{ 
public: 
    CSlowHorse(const CHorse& Horse, const char* pHorseName, bool bVerySlowHorse, int nLegCount) : CHorse(Horse) 
    { 
    } 
}; 

int main(int argc, char* argv[]) 
{ 
    CHorse Horse; 
    std::shared_ptr<CSlowHorse> pSlowHorse = std::make_shared<CSlowHorse>(Horse, "a slow horse", false, 4); 
    return 0; 
} 

PS:對於那些想發表意見,這是一個壞榜樣 - 是的,它是,如果std::shared_ptr實例傳遞,實際上一直被刪除會導致非常糟糕的棧對象後,參照CHorse ,這只是爲了表明一個類似的例子編譯。