Вот код, который я компилирую … Я создаю оболочку C для cv :: Scalar :: all, чтобы я мог переносить ее на другой язык …
CPP
Scalar* cv_create_ScalarAll(double val)
{
return new Scalar::all(val);
}
HPP
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 безрезультатно … . Любая помощь приветствуется =)
^
Вы получаете эту ошибку, потому что Scalar::all
это не тип (в отличие от Scalar
). Просто удаляя new
не будет работать, потому что Scalar::all
возвращает экземпляр Scalar с локальным хранилищем.
Скорее всего, вы хотите это:
Scalar* cv_create_ScalarAll(double val)
{
return new Scalar(Scalar::all(val));
}
Оператор new создает объект и выделяет его память, поэтому ему нужен тип нового объекта. В вашем коде предоставляется вызов метода вместо типа. Вы можете проверить метод в документации OpenCV, но похоже, что он возвращает скаляр — поэтому, если вы пишете просто обертку для этого метода, вызова функции вполне достаточно.
Scalar* cv_create_ScalarAll(double val)
{
return Scalar::all(val);
}