代码之家  ›  专栏  ›  技术社区  ›  Peter Smit

为什么C++代码失败?

  •  0
  • Peter Smit  · 技术社区  · 15 年前

    我有以下代码

    #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-墙-C -fmessage length=0-mmd-mp-mf“src/testiterator.d”-mt“src/testiterator.d”-o“src/testiterator.o”“../src/testiterator.cpp” /Ur/Eng/C++/4.3/Buts/StLyTyrActuaBaseType类型:h:在实例化中 'std::iterator_traits>': ../src/testerator.cpp:50(50个):
    从此处实例化 /Ur/Eng/C++/4.3/BIT/STLyTyrActuaBaseType类型:h:133: 错误:没有名为的类型 类中的“迭代器”类别 标准::矢量

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

    为什么会这样?当我替换时 distance(*itouter, *itinner) == 0 具有 itinner->size() == itouter->size() 代码正在编译并运行良好。

    2 回复  |  直到 15 年前
        1
  •  8
  •   Manuel    15 年前

    尤德 distance 函数与中的函数冲突 std . 这就是为什么通常不建议写 using namespace std; 在您的代码中。尝试删除它或将函数重命名为 my_distance .

        2
  •  0
  •   Naveen    15 年前

    它试图使用 distance 算法定义于 namespace std . 如果要调用距离函数,请使用 ::distance