0

これは機能します:

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

しかし、make_shared でそれを行う場合:

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

「ofxDTangibleBase」は値を参照していません」というメッセージが表示されます。修正方法を探しましたが、多くのパラメーターが必要になるなどの問題を抱えている人が見つかりました。

私は何かを見落としていますか?

編集:

コンストラクタは次のようになります。

ofxDTangibleBase(const ofxCvBlob& base, const char *className, ofxDDetectColor *detectColor, const ofxCvGrayscaleImage *thresholdImage) : ofxCvBlob(base) {

そして、クラスは別のクラスを拡張します:

class ofxDTangibleBase : public ofxCvBlob {
4

1 に答える 1

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、スタックオブジェクトが削除された後に実際に参照を保持している場合、結果は非常に貧弱になります。例がコンパイルされます。

于 2013-11-28T15:04:19.760 に答える