это работает:
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 {
Трудно сказать, может быть, попытаться уменьшить код и посмотреть, поможет ли это прояснить небольшой тестовый пример. Например. это, который построен по вашему примеру, прекрасно компилируется. У вас есть все надлежащие декларации видны? Может быть, что-то объявлено заранее, хотя это не должно быть проблемой.
#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;
}
П.С .: Для людей, желающих прокомментировать, что это плохой пример — да, если std::shared_ptr
экземпляр передается и фактически содержит ссылку на CHorse
после удаления стекового объекта это будет очень плохо, это только для того, чтобы показать, что подобный пример компилируется.
Других решений пока нет …