18

我在使用以下代码时遇到问题,似乎无法弄清楚出了什么问题

#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;
}

错误在于函数距离的调用。

/usr/include/c++/4.6/bits/stl_iterator_base_types.h: In instantiation of ‘std::iterator_traits<int>’:
test.cpp:18:30:   instantiated from here
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:166:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:167:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:168:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:169:53: error: ‘int’ is not a class, struct, or union type
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:170:53: error: ‘int’ is not a class, struct, or union type
4

4 回答 4

33

您正在尝试覆盖 std::distance 函数,尝试删除 " using namespace std" 并限定coutendl使用std::

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


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

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

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

std::distance用于统计指定范围内容器中的元素个数。你可以在这里找到更多关于它的信息。

或者,如果要引入std::命名空间,可以重命名距离函数:

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

using namespace std;

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

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

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

这将使您的代码工作,但不建议在定义之前有“使用命名空间”声明。编写代码时,应避免使用第二种选择,此处仅作为代码示例的替代方法显示。

于 2013-01-14T16:22:57.160 回答
9

怎么样

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

(其他答案已经建议删除该using指令)。

于 2013-01-14T16:23:49.977 回答
4

using namespace std当您创建自己的函数时不要使用调用distance,因为您的调用distance是在寻找std::distance而不是您的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.
}
于 2013-01-14T16:21:49.067 回答
0

或者,您可以使用

 using foo::distance; // OR:
 using namespace foo;

 (distance)(x,y); // the (parens) prevent ADL
于 2013-01-14T16:39:26.637 回答