在C ++中等同来自不同类的2个对象

时间:2014-05-13 09:56:25

标签: c++

我有以下课程:

//File Name: A.cpp
 class A{
   struct L{
       uint64_t r;
       std::vector < std::pair < std::pair < uint64_t, uint64_t> , std::vector <uint64_t> > > c;
   };
   std::tr1::unordered_map< uint64_t ,L> m;   
};

//File Name: B.cpp
class A;
class B{
   struct L{
       uint64_t r;
       std::vector < std::pair < std::pair < uint64_t, uint64_t >, std::vector <uint64_t > > > c;
   };
   std::tr1::unordered_map< uint64_t , L> m;
public:
   void equateMaps(std::tr1::unordered_map< uint64_t , L> m){
       this->m=m;
   }
};

//File main.cpp
main()
{
    B b; 
    A a
    b.equateMaps(a.m);
}

但是当我这样做时,我收到以下错误:

error: no matching function for call to ‘b::equateMaps(std::tr1::unordered_map<long unsigned int, A::L>&)’

我无法理解为什么会收到此错误?有人可以帮忙找出我哪里出错吗?

我在Ubuntu中使用g ++编译器

1 个答案:

答案 0 :(得分:2)

如果您确实希望struct L成为相同的类型,则必须将其移出类声明,将其放在单独的标头中,然后将其包含在两个类中:

// In a separate header
struct L{
       uint64_t r;
       std::vector < std::pair < std::pair < uint64_t, uint64_t> , std::vector <uint64_t> > > c;
};

// In header for A
#include "l.h"

class A {
    std::tr1::unordered_map< uint64_t ,L> m; 
};

// Similar for B...

正如您目前所拥有的那样,A::LB::L是完全无关的类型,甚至认为它们看起来一样。因此相应的地图也是不同的类型,无法进行比较。