C++ - Ошибка: ожидаемый спецификатор типа при создании оболочки C для OpenCV cv::Scalar::all

Вот код, который я компилирую... Я создаю оболочку 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

Новый оператор создает объект и выделяет ему память, поэтому ему нужен тип нового объекта. В вашем коде вместо типа предоставляется вызов метода. Вы можете проверить метод в документации OpenCV, но похоже, что он возвращает скаляр — поэтому, если вы напишите просто обертку для этого метода, вызова функции будет вполне достаточно.

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