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