''className'不引用带有make_shared的值'

时间:2013-11-28 14:22:23

标签: c++ 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);

我得到''ofDDTangibleBase'没有引用一个值' 我找了一个修复,但我发现有问题的人有许多参数等。

我忽视了什么吗?

编辑:

构造函数如下所示:

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

该课程扩展了另一个课程:

class ofxDTangibleBase : public ofxCvBlob {

1 个答案:

答案 0 :(得分: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的引用将导致非常糟糕,这只是为了表明类似的例子编译。