环境:Ubuntu16.04
工具:Eclipse + cdt
opencv 4.0.0
编写好的正常代码,在Build Project
过程中出现类似于“标准库”错误:
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/seam_finders.hpp:250:29: error: field ‘impl_’ has incomplete type ‘cv::Ptr’
Ptr impl_;
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
struct Ptr : public std::shared_ptr
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:53:0,
from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:108:30: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
void prepare(Rect dst_roi) CV_OVERRIDE;
^
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:109:56: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
void feed(InputArray img, InputArray mask, Point tl) CV_OVERRIDE;
^
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:110:63: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
void blend(InputOutputArray dst, InputOutputArray dst_mask) CV_OVERRIDE;
^
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:135:30: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
void prepare(Rect dst_roi) CV_OVERRIDE;
^
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:136:56: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
void feed(InputArray img, InputArray mask, Point tl) CV_OVERRIDE;
^
/usr/local/opencv4/include/opencv4/opencv2/stitching/detail/blenders.hpp:137:63: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11
void blend(InputOutputArray dst, InputOutputArray dst_mask) CV_OVERRIDE;
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:145:12: error: ‘constexpr’ does not name a type
static constexpr const double ORIG_RESOL = -1.0;
^
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:145:12: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:292:20: error: field ‘features_finder_’ has incomplete type ‘cv::Ptr’
Ptr features_finder_;
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
struct Ptr : public std::shared_ptr
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:293:34: error: field ‘features_matcher_’ has incomplete type ‘cv::Ptr’
Ptr features_matcher_;
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
struct Ptr : public std::shared_ptr
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:295:37: error: field ‘bundle_adjuster_’ has incomplete type ‘cv::Ptr’
Ptr bundle_adjuster_;
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
struct Ptr : public std::shared_ptr
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:296:28: error: field ‘estimator_’ has incomplete type ‘cv::Ptr’
Ptr estimator_;
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
struct Ptr : public std::shared_ptr
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:299:24: error: field ‘warper_’ has incomplete type ‘cv::Ptr’
Ptr warper_;
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/cvstd_wrapper.hpp:66:8: note: declaration of ‘struct cv::Ptr’
struct Ptr : public std::shared_ptr
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:89:0,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/stitching.hpp:300:38: error: field ‘exposure_comp_’ has incomplete type ‘cv::Ptr’
Ptr exposure_comp_;
^
In file included from /usr/local/opencv4/include/opencv4/opencv2/core/cvstd.hpp:81:0,
from /usr/local/opencv4/include/opencv4/opencv2/core/base.hpp:58,
from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:54,
from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
from ../src/testcv.cpp:1:
^
...
In file included from /usr/local/opencv4/include/opencv4/opencv2/core.hpp:58:0,
from /usr/local/opencv4/include/opencv4/opencv2/opencv.hpp:52,
from ../src/testcv.cpp:1:
/usr/local/opencv4/include/opencv4/opencv2/core/types.hpp:1852:13: note: candidate: cv::Rect_<_Tp>& cv::Rect_<_Tp>::operator=(const cv::Rect_<_Tp>&) [with _Tp = int]
Rect_<_Tp>& Rect_<_Tp>::operator = ( const Rect_<_Tp>& r )
^
/usr/local/opencv4/include/opencv4/opencv2/core/types.hpp:1862:13: note: candidate: cv::Rect_<_Tp>& cv::Rect_<_Tp>::operator=(cv::Rect_<_Tp>) [with _Tp = int]
Rect_<_Tp>& Rect_<_Tp>::operator = ( Rect_<_Tp>&& r ) CV_NOEXCEPT
^
make: *** [src/testcv.o] Error 1
16:32:01 Build Finished (took 1s.585ms)
Opencv 4.0需要C++11
特性支持,所以必须对项目设置:
之后即可正常编译。
补充:如果正常gcc命令行编译出现相同错误,应使用:
g++ -c -std=c++11 -I/usr/loca/opencv4/include/opencv4 xxx.cpp
这里opencv的include路径根据各自环境调整。