我的代码中有2个对象(对象' A'对象' B')。首先,在我的主要功能中,我创建了一个' A'对象,然后在' A'对象,我创造了' B'宾语。 现在我希望能够调用一些函数并访问其他类中某个类的一些类成员。它很容易访问' B'来自' A'的成员但我不能这样做。
简而言之: - 来自' A'我想访问一些' B'班级成员。 - 来自' B'我想访问一些' A'班级成员。
我的代码(这只是一个小例子,试图解释我想做什么。):
mian.cpp
#include <iostream>
#include "a.h"
using namespace std;
int main()
{
a *pa;
pa=new a();
cout << "Bye" << endl;
delete pa;
return 0;
}
a.cpp
#include <iostream>
#include "a.h"
a::a(void)
{
std::cout << "Class A" << std::endl;
b_a=new b();
b_a->fun1(this);
}
void a::fun2(void)
{
std::cout << "Function 2" << std::endl;
delete b_a;
}
b.cpp
#include <iostream>
#include "b.h"
b::b(void)
{
std::cout << "Class B" << std::endl;
}
void b::fun1(a *pa)
{
std::cout << "Function 1" << std::endl;
a_b=pa;
a_b->fun2();
}
A.H
#ifndef A_H_INCLUDED
#define A_H_INCLUDED
#include "b.h"
class a
{
private:
b *b_a;
public:
a();
void fun2();
};
#endif // A_H_INCLUDED
b.h
#ifndef B_H_INCLUDED
#define B_H_INCLUDED
class a; // Forward declaration
class b
{
private:
a *a_b;
public:
b();
void fun1(a *pa);
};
#endif // B_H_INCLUDED
当我尝试编译时,我收到此错误:&#34;错误:无效使用不完整类型&#39; class a&#39;&#34;。然后:&#34;错误:转发&#39; a类&#39;&#34;。
我认为前向声明存在问题,但我读过我必须使用它来避免头文件中的循环引用。
任何帮助或建议都会非常感激。提前谢谢。
答案 0 :(得分:0)
在你的a.h中,为b类做另一个前瞻声明。它被称为循环前向声明。
http://fw-geekycoder.blogspot.com/2012/04/how-to-resolve-circular-dependencies-in.html