【问题标题】:error: 'varName' was not declared in this scope [duplicate]错误:未在此范围内声明“varName”[重复]
【发布时间】:2015-03-29 13:45:54
【问题描述】:

我想在我的图像中找到最大的轮廓(使用 opencv 和 C++)。我读过这个线程: Finding Contours in OpenCV?Draw the biggest element conncted using areaContours (OpenCV ) 但我得到了错误:'varName' 没有在这个范围内声明,这意味着编译器认为我没有声明那个变量对吗?所以我的代码的这个sn-p:

    threshold(Img, Img, t, 255, CV_THRESH_BINARY_INV);
    vector<vector<Point>> varName;
    findContours(Img, varName, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);

我收到了这个错误:

   D:\OpencvWorkspace\....|50|error: 'varName' was not declared in this scope|

第 50 行是这段代码:

    vector<vector<Point>> varName;

我的问题。为什么编译器要求这个变量没有在我声明那个变量的那一行声明。有人可以帮我吗?

【问题讨论】:

  • 请发帖MCVE
  • 您使用的是 C++11 之前的标准编译器吗?试试vector&lt;vector&lt;Point&gt; &gt;(注意空格)。
  • 很抱歉,因为我认为问题的根源就在这条线上。感谢@chris 提醒我。 :)
  • 我检查它的版本 GCC 4.6.2。我不知道它与 C++11 之前的标准编译器相同还是不同.. 但是是的.. 它对我有用。问题因为空间小。谢谢@πάνταῥεῖ :)

标签: c++ opencv declare


【解决方案1】:

您使用了 c++11 之前的标准编译器(如 your comment 中所证明的那样)。较旧的标准在让解析器从operator&gt;&gt;() 中消除嵌套模板类型说明符中使用的一对右尖括号&gt;&gt; 时存在问题。因此,您必须在它们之间写一个空格:

vector<vector<Point> > varName;
                 // ^ Note the space

【讨论】:

    【解决方案2】:

    是的,比如 πάντα ῥεῖ 说。问题是因为“>”和“>”之间的空格。 所以我改变了这个声明:

       vector<vector<Point>> varName;
    

    到这个:

       vector<vector<Point> > varName;
    

    通过在“>”和“>”之间添加空格,错误就消失了。谢谢 πάντα ῥεῖ

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      相关资源
      最近更新 更多