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