我有以下课程:
//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 ++编译器
答案 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::L
和B::L
是完全无关的类型,甚至认为它们看起来一样。因此相应的地图也是不同的类型,无法进行比较。