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++ - 为什么 SetUnhandledExceptionFilter 无法捕获某些异常但 AddVectoredExceptionHandler 可以

C++11 动态转换 If Else Chain -> Switch

c++ - 模板函数参数的含义是什么?

javascript - 是否有一个 jQuery 插件可以让我通过透明背景在图像顶部显示 "overlay"文本?

ubuntu - 在 ubuntu 12.4 上启动 ise14.6

linux - 在 Ubuntu 终端中禁用自动换行

c++ - SFML 2.1纹理

c++ - 包含自身实例化的模板,C++ 中的递归

java - SWIG - 如何忽略我不需要公开的 C++ 类(在 Java 中)?

opencv 2.4.5 编译错误 (gpu_info.cpp)