我已经在 Windows 中使用 MSVS 2008 编写和编译了 C++ 函数。他们有一些模板。
这些函数已编译并在 Windows 中运行良好,但是当我在 Ubuntu 中使用“make”编译同一个项目时,它会产生错误。这是模板
template <class NumType>
void drawCircles(cv::Mat& image, const cv::Mat_<cv::Vec<NumType, 2>> points, cv::Scalar color)
{
// added working for both row/col point vector
Point2d p0;
for (int i = 0; i < points.cols; i++)
{
p0.x = cvRound(points.at<Vec<NumType, 2>>(0,i)[0]);
p0.y = cvRound(points.at<Vec<NumType, 2>>(0,i)[1]);
circle(image, p0, 5, color, 2, 8);
}
}
错误不断重复:
‘points’ was not declared in this scope
make 或 CMake 是否有任何选项会为模板创建此类错误?
谢谢你!
最佳答案
因为你没有标记你的问题 C++11,我只能假设你没有为你的编译器启用它。这意味着
cv::Mat_<cv::Vec<NumType, 2>> points
被解释为:
cv::Mat_<cv::Vec<NumType, (2>> points)
2>> points
被解释为位移运算符,这就是它寻找名为 points
的变量的原因。
关于 C++11 的评论是因为这种情况在此版本中发生了变化,其中 >>>
将尽可能被解释为模板参数列表的两端,这意味着您的语法将是正确的。
解决方案是在编译器中启用 C++11 或关闭两个模板参数列表,如下所示:
cv::Mat_<cv::Vec<NumType, 2> > points
注意添加的新空间。
关于c++ - Ubuntu和make中的模板编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24608032/