好的,我理解前向声明,但是在这种情况下,我需要在两端调用成员/字段,所以我不能使用它。我试图覆盖.cpp文件中的声明(包括我需要使用的类的实际头),但是当我试图使用它时,我通过前向声明在标头中定义的指针被打破了。
我怎么才能避开这一切?你需要密码吗?
发布于 2013-11-25 23:08:05
您需要记住,形成指向类的指针只需要该类的声明,而访问该类的成员则需要它的定义。因此,要解决循环依赖关系,可以这样做:
A.hpp
class B;
class A
{
public:
int foo(B *b);
int bar();
};B.hpp
class A;
class B
{
A *m_a;
public:
int foo();
explicit B(A *a) : m_a(a) {}
};A.cpp
#include "A.hpp"
#include "B.hpp"
int A::foo(B *b)
{
return 2 * b->foo();
}
int A::bar()
{
return 42;
}B.cpp
#include "A.hpp"
#include "B.hpp"
int B::foo()
{
return m_a->bar();
}https://stackoverflow.com/questions/20205215
复制相似问题