» className ‘не ссылается на значение’ с 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);

Я получаю » ofxDTangibleBase ‘не ссылается на значение’
Я искал исправление, но нашел людей с такими проблемами, как наличие множества параметров и т. Д.

Я что-то пропускаю?

Редактировать:

конструктор выглядит так:

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

И класс расширяет другой класс:

class ofxDTangibleBase : public ofxCvBlob {

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;
}

П.С .: Для людей, желающих прокомментировать, что это плохой пример — да, если std::shared_ptr экземпляр передается и фактически содержит ссылку на CHorse после удаления стекового объекта это будет очень плохо, это только для того, чтобы показать, что подобный пример компилируется.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]