还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

/usr/include/c++/4.9/bits/stl_iterator_base_types.h:165:53: error: ‘int’ is not a class, struct, or union type

来源:清泛原创     2016-10-24 17:46:56    人气:     我有话说( 0 人参与)

先看下面的代码(来自:SO):#include <iostream>#include <cmath>#include <vector>using namespace std;double distance(int a, in...

先看下面的代码(来自: SO):

#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

double distance(int a, int b)
{
    return fabs(a-b);
}

int main()
{
    vector<int> age;
    age.push_back(10);
    age.push_back(15);

    cout << distance(age[0],age[1]);
    return 0;
}

这段代码初看起来并无错误,编译时提示上述错误,原因在于使用std命名空间,而std命名空间中已经有了std::distance函数.

 

原型为:

template<class InputIterator>
  typename iterator_traits<InputIterator>::difference_type
    distance (InputIterator first, InputIterator last);

这个函数要求两个参数至少都满足InPut Iterator约束,y而age[0]为int类型,不满足这个约束,因此导致上面的错误信息.

 

这段代码的错误之处,在于std命名空间中的distance屏蔽了本地的distance函数,解决方法即为,显式调用本地方法,例如使用

::distance(age[0],age[1])

或者将distance放在一个命名空间中,例如:

namespace foo
{
  double distance(int a, int b)
  {
    return fabs(a-b);
  }
}

int main()
{
   foo::distance(x,y); //now you're calling your own distance function.
}

或者不使用命名空间std,显式声明std::vector也可以解决。

error 显示调用

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: