C++ - 错误:为 OpenCV 的 cv::Scalar::all 创建 C 包装器时出现预期的类型说明符
Posted
技术标签:
【中文标题】C++ - 错误:为 OpenCV 的 cv::Scalar::all 创建 C 包装器时出现预期的类型说明符【英文标题】:C++ - Error: expected type-specifier while creating C wrapper for OpenCV's cv::Scalar::all 【发布时间】:2014-03-09 01:01:56 【问题描述】:这是我正在编译的代码...我正在为 cv::Scalar::all 创建一个 C 包装器,以便我可以用另一种语言包装...
cpp
Scalar* cv_create_ScalarAll(double val)
return new Scalar::all(val);
hpp
Scalar* cv_create_ScalarAll(double val);
在 Ubuntu Trusty Tahr 上使用“g++ -Wall -shared -fPIC -o opencv-glue.so opencv-glue.cpp”编译
我遇到了这个错误
error: expected type-specifier
return new Scalar::all(val);
我刚刚成功编写了一个类似的函数来将 cv::Scalar 包装在 C 中,为此做了同样的事情,但它不起作用....我尝试删除 New 添加 cv:: 并用 Google 搜索无济于事....任何帮助表示赞赏=) ^
【问题讨论】:
【参考方案1】:您收到此错误是因为 Scalar::all
不是类型(与 Scalar
不同)。仅删除 new
是行不通的,因为 Scalar::all
返回具有本地存储的 Scalar 实例。
您最可能想要的是:
Scalar* cv_create_ScalarAll(double val)
return new Scalar(Scalar::all(val));
【讨论】:
感谢 SleuthEye,或者我应该说,福尔摩斯?=) 你破案了!编译得很完美!......也感谢您的详细解释。美好的一天。【参考方案2】:new 操作符创建一个对象并分配它的内存,因此它需要新对象的类型。在您的代码中,提供了对方法的调用而不是类型。您可以在 OpenCV 文档中查看该方法,但看起来它返回的是一个标量 - 因此,如果您只为该方法编写一个包装器,那么对函数的调用就足够了。
Scalar* cv_create_ScalarAll(double val)
return Scalar::all(val);
【讨论】:
以上是关于C++ - 错误:为 OpenCV 的 cv::Scalar::all 创建 C 包装器时出现预期的类型说明符的主要内容,如果未能解决你的问题,请参考以下文章
OPENCV / C++: approxpolydp 断言失败错误