在C++中使用vector

Dzu*_*yen 18 c++ vector

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

错误在于调用函数距离.

/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
Run Code Online (Sandbox Code Playgroud)

tma*_*ric 33

您正在尝试覆盖的std ::距离函数,尝试删除" using namespace std"和排位赛coutendlstd::

#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;
}
Run Code Online (Sandbox Code Playgroud)

所述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;
}
Run Code Online (Sandbox Code Playgroud)

这将使您的代码工作,但不建议在定义之前使用"using namespace"声明.编写代码时,应避免使用第二个选项,此处仅显示代码示例的替代选项.

  • @Mithrandir,不,"简单"是"不要将另一个命名空间带入全局命名空间",因为*这就是我们拥有它们的原因*! (6认同)
  • @Mithrandir:名称空间是_enable_你重用名称.如果你害怕名字冲突和代码周围的代码,你使用的命名空间错误或不理解它们. (3认同)
  • 或者只是重命名自己的距离函数并删除与`std :: distance`的冲突. (2认同)

Luc*_*ore 9

怎么样

cout<< ::distance(age[0],age[1]);
Run Code Online (Sandbox Code Playgroud)

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

  • 关于范围解析运算符,这是一个值得了解的事情,但我不会将它放在生产代码中,除非避免它会导致大的问题.尽管有用的琐事是+1. (3认同)