C++ - Грешка: очакван спецификатор на тип при създаване на C обвивка за cv::Scalar::all на OpenCV

Ето кода, който компилирам... създавам C обвивка за cv::Scalar::all, за да мога да обвивам на друг език...

cpp

 Scalar* cv_create_ScalarAll(double val)
{
    return new Scalar::all(val);
}

к.с

Scalar* cv_create_ScalarAll(double val);

компилирайте с 'g++ -Wall -shared -fPIC -o opencv-glue.so opencv-glue.cpp' на Ubuntu Trusty Tahr

Получавам тази грешка

error: expected type-specifier
     return new Scalar::all(val);

Току-що написах подобна функция успешно, за да обвия cv::Scalar в C и така направих същото за това, но не работи.... Опитах се да премахна New, добавяйки cv:: и Googled без резултат... .всяка помощ се оценява =) ^


person Community    schedule 09.03.2014    source източник


Отговори (2)


Получавате тази грешка, защото Scalar::all не е тип (за разлика от Scalar). Самото премахване на new няма да работи, защото Scalar::all връща екземпляр на Scalar с локално хранилище. Най-вероятно искате да искате е:

Scalar* cv_create_ScalarAll(double val)
{
    return new Scalar(Scalar::all(val));
}
person SleuthEye    schedule 09.03.2014
comment
Благодаря SleuthEye, или трябва да кажа, Шерлок Холмс?=) Разгадахте случая! Това е компилирано перфектно!... Благодаря и за подробното обяснение. Добър ден. - person ; 09.03.2014

Операторът new създава обект и разпределя паметта му, следователно се нуждае от тип на новия обект. Във вашия код е предоставено извикване на метод вместо типа. Можете да проверите метода в документацията на OpenCV, но изглежда, че връща скалар - така че ако напишете само обвивка за този метод, извикването на функция е напълно достатъчно.

Scalar* cv_create_ScalarAll(double val)
{
    return Scalar::all(val);
}
person mcopik    schedule 09.03.2014