为什么这个C ++代码失败了?

时间:2010-02-19 09:47:51

标签: c++ compiler-errors

我有以下代码

#include <iostream>
#include <vector>

using namespace std;

int distance(vector<int>& set1, vector<int>& set2) {
    int distance = 0;

    unsigned int i1 = 0;
    unsigned int i2 = 0;
    while(i1 < set1.size() && i2 < set2.size()) {
        if(set1[i1] == set2[i2]) {
            ++i1; ++i2;
        } else {
            ++distance;
            set1[i1] < set2[i2] ? ++i1 : ++i2;
        }
    }

    unsigned int zero = 0;
    distance += std::max(set1.size() - i1, zero) + std::max(set2.size() - i2, zero);
}

int main() {
    vector<vector<int> > frequent_sets;
    vector<int> vector3;
    vector3.push_back(1);vector3.push_back(2);vector3.push_back(3);
    vector<int> vector2;
    vector2.push_back(1);vector2.push_back(2);

    frequent_sets.push_back(vector3);
    frequent_sets.push_back(vector3);
    frequent_sets.push_back(vector2);
    frequent_sets.push_back(vector3);


    for(vector<vector<int> >::iterator itouter = frequent_sets.begin(); itouter != frequent_sets.end(); ++itouter)
        for(vector<vector<int> >::iterator itinner = (itouter + 1); itinner != frequent_sets.end(); ++itinner)
            if(distance(*itinner, *itouter) == 0) {
                cout << "Hey" << endl;
            }
}

当我尝试编译时,我收到错误:

  

制作所有建筑文件:   ../src/TestIterator.cpp调用:GCC   C ++编译器g ++ -O0 -g3 -Wall -c   -fmessage-length = 0 -MMD -MP -MF“src / TestIterator.d”-MT“src / TestIterator.d”-o“src / TestIterator.o”“../ src / TestIterator.cpp”   /usr/include/c++/4.3/bits/stl_iterator_base_types.h:实例化   'std :: iterator_traits&gt; &GT;':   ../src/TestIterator.cpp:50:
  从这里实例化   /usr/include/c++/4.3/bits/stl_iterator_base_types.h:133:   错误:没有命名的类型   'class中的'iterator_category'   的std ::矢量

     
    

'make:*** [src / TestIterator.o]错误1

  

这是为什么?当我用distance(*itouter, *itinner) == 0替换itinner->size() == itouter->size()时,代码正在编译并正常运行。

2 个答案:

答案 0 :(得分:8)

youd distance函数与std中的函数发生冲突。这就是为什么通常不建议在代码中编写using namespace std;。尝试删除该功能或将您的功能重命名为my_distance

答案 1 :(得分:0)

它正在尝试使用distance中定义的namespace std算法。如果您希望调用距离函数,请使用::distance