语法检查器指出一些我不知道为什么的错误
Syntax checker pointing some errors I don't know why
我已将 Eclipse CDT 更新到 9.8.1,语法检查器开始指出一些并非如此的错误。在此示例中,p3Dw
和 Ow
是 cv::Mat
对象,语法检查器将 PO
下划线显示为 "Invalid arguments":
cv::Mat PO = p3Dw-Ow;
Invalid arguments '
Candidates are:
Mat()
Mat(int, int, int)
Mat(int, int, int, const cv::Scalar_<double> &)
Mat(cv::Size_<int>, int)
Mat(cv::Size_<int>, int, const cv::Scalar_<double> &)
Mat(int, const int *, int)
Mat(int, const int *, int, const cv::Scalar_<double> &)
Mat(const std::vector<int,std::allocator<int>> &, int)
Mat(const std::vector<int,std::allocator<int>> &, int, const cv::Scalar_<double> &)
Mat(const cv::Mat &)
Mat(int, int, int, void *, unsigned long int)
Mat(cv::Size_<int>, int, void *, unsigned long int)
Mat(const std::vector<#0,std::allocator<#0>> &, bool)
Mat(std::initializer_list<#0>)
Mat(std::initializer_list<int>, std::initializer_list<#0>)
Mat(const std::array<#0,unsigned long int3 #1 0> &, bool)
Mat(const cv::Vec<#0,int3 #1 0> &, bool)
Mat(const cv::Matx<#0,int3 #1 0,int3 #2 0> &, bool)
Mat(const cv::Point_<#0> &, bool)
Mat(const cv::Point3_<#0> &, bool)
Mat(const cv::MatCommaInitializer_<#0> &)
Mat(const cv::Mat &, const cv::Range &, const cv::Range &)
Mat(const cv::Mat &, const cv::Rect_<int> &)
Mat(const cv::Mat &, const cv::Range *)
Mat(const cv::Mat &, const std::vector<cv::Range,std::allocator<cv::Range>> &)
Mat(cv::Mat &&)
Mat(int, const int *, int, void *, const unsigned long int *)
Mat(const std::vector<int,std::allocator<int>> &, int, void *, const unsigned long int *)
Mat(const cv::cuda::GpuMat &)
'
只有在声明时使用 MatExpr 分配 Mat 时才会发生。否则不会发生:您可以声明一个 Mat 来分配另一个 Mat,或者将 MatExpr 分配给之前声明的 Mat。
此代码已运行多年。现在我正在乱搞,一时半会编不出来
我清理了项目并重建了索引,但没有任何改善。
还有其他奇怪的误导性错误。使用命名空间标准;检查标记向量和 unique_lock 作为错误,除非我添加 std::
有什么想法吗?谢谢。
opencv4
文档中有自由函数 MatExpr operator-(const Mat &a, const Mat &b);
函数和赋值运算符 Mat& Mat::operator=(const MatExpr &expr);
,但没有接受 MatExpr
的 Mat
构造函数。
但是有一个转换运算符:cv::MatExpr::operator Mat() const;
,应该让你的代码工作,它确实在opencv中工作3.4.4.最小示例:
#include <opencv2/core/mat.hpp> // it is really opencv 3.4.4
int main() {
cv::Mat p3Dw;
cv::Mat Ow;
cv::Mat PO = p3Dw-Ow;
}
如果它在 opencv 4 中不起作用,他们可能已经制作了复制构造函数 explicit
(即使它不在手册中)。如果是这样,将 MatExpr
转换为 Mat
:
cv::Mat PO = static_cast<cv::Mat>(p3Dw-Ow);
我已将 Eclipse CDT 更新到 9.8.1,语法检查器开始指出一些并非如此的错误。在此示例中,p3Dw
和 Ow
是 cv::Mat
对象,语法检查器将 PO
下划线显示为 "Invalid arguments":
cv::Mat PO = p3Dw-Ow;
Invalid arguments '
Candidates are:
Mat()
Mat(int, int, int)
Mat(int, int, int, const cv::Scalar_<double> &)
Mat(cv::Size_<int>, int)
Mat(cv::Size_<int>, int, const cv::Scalar_<double> &)
Mat(int, const int *, int)
Mat(int, const int *, int, const cv::Scalar_<double> &)
Mat(const std::vector<int,std::allocator<int>> &, int)
Mat(const std::vector<int,std::allocator<int>> &, int, const cv::Scalar_<double> &)
Mat(const cv::Mat &)
Mat(int, int, int, void *, unsigned long int)
Mat(cv::Size_<int>, int, void *, unsigned long int)
Mat(const std::vector<#0,std::allocator<#0>> &, bool)
Mat(std::initializer_list<#0>)
Mat(std::initializer_list<int>, std::initializer_list<#0>)
Mat(const std::array<#0,unsigned long int3 #1 0> &, bool)
Mat(const cv::Vec<#0,int3 #1 0> &, bool)
Mat(const cv::Matx<#0,int3 #1 0,int3 #2 0> &, bool)
Mat(const cv::Point_<#0> &, bool)
Mat(const cv::Point3_<#0> &, bool)
Mat(const cv::MatCommaInitializer_<#0> &)
Mat(const cv::Mat &, const cv::Range &, const cv::Range &)
Mat(const cv::Mat &, const cv::Rect_<int> &)
Mat(const cv::Mat &, const cv::Range *)
Mat(const cv::Mat &, const std::vector<cv::Range,std::allocator<cv::Range>> &)
Mat(cv::Mat &&)
Mat(int, const int *, int, void *, const unsigned long int *)
Mat(const std::vector<int,std::allocator<int>> &, int, void *, const unsigned long int *)
Mat(const cv::cuda::GpuMat &)
'
只有在声明时使用 MatExpr 分配 Mat 时才会发生。否则不会发生:您可以声明一个 Mat 来分配另一个 Mat,或者将 MatExpr 分配给之前声明的 Mat。
此代码已运行多年。现在我正在乱搞,一时半会编不出来
我清理了项目并重建了索引,但没有任何改善。
还有其他奇怪的误导性错误。使用命名空间标准;检查标记向量和 unique_lock 作为错误,除非我添加 std::
有什么想法吗?谢谢。
opencv4
文档中有自由函数 MatExpr operator-(const Mat &a, const Mat &b);
函数和赋值运算符 Mat& Mat::operator=(const MatExpr &expr);
,但没有接受 MatExpr
的 Mat
构造函数。
但是有一个转换运算符:cv::MatExpr::operator Mat() const;
,应该让你的代码工作,它确实在opencv中工作3.4.4.最小示例:
#include <opencv2/core/mat.hpp> // it is really opencv 3.4.4
int main() {
cv::Mat p3Dw;
cv::Mat Ow;
cv::Mat PO = p3Dw-Ow;
}
如果它在 opencv 4 中不起作用,他们可能已经制作了复制构造函数 explicit
(即使它不在手册中)。如果是这样,将 MatExpr
转换为 Mat
:
cv::Mat PO = static_cast<cv::Mat>(p3Dw-Ow);