c++ - Ubuntu和make中的模板编译错误

标签 c++ templates ubuntu-12.04

我已经在 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/

相关文章:

c++ - 声明和定义函数静态会产生 "undefined reference to function_name()"

c++ - 如何通过 bash shell cin a c++ 字符串 >= 1024 个字符?

c++ - C++ 中派生类的模板参数的运行时选择 - 标准名称?

c - 如何自动删除空行 - kdevelop

c++ - 无法用gcc打开图形文件gcov

C++ 多行字符串文字

C++构造函数SFINAE

C++ -- 确定泛型变量是否为指针

C++ 模板 : return value by type

opencv - 如何在 Ubuntu 上正确安装 OpenCV?