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 回答