我正在做一个小程序,只是为了上课。 我已经完成了两个课程,a和b。
我希望能够访问b中,反之亦然。 这是我到目前为止所得到的:
#ifndef A_HH_
#define A_HH_
#include <string>
class b;
class a
{
private:
string aString;
b* bClass;
public:
a(){aString = "A";}
string getString(){return aString;}
string getBString(){return bClass->bString;}
};
#endif /* A_HH_ */
和b:
#ifndef B_HH_
#define B_HH_
#include <string>
class a;
class b
{
private:
string bString;
a* aClass;
public:
b(){bString = "B";}
string getString(){return bString;}
};
#endif /* B_HH_ */
我希望能够访问指针而不仅仅是存储指针。 我怎么能这样做?
答案 0 :(得分:1)
问题是你在类bClass
中使用 a
指针,因为你需要定义类b
。在这种情况下,只需在b.hh
中加入a.hh
即可解决此问题。这个简单的解决方案将起作用,因为您只在类a
中声明b
指针(但不访问它)。前向声明是不够的,因为它实际上并没有告诉编译器,只有类b
存在。
哦,您需要将bClass->bString
中的a::getBString
更改为bClass->getString()
,因为b::bString
是私有的。当然,创建b
的实际实例并将其分配给bClass
。
答案 1 :(得分:0)
简而言之,要访问结构或类的成员,您需要满足两个条件:
要克服1.您可以将成员公开,或将访问类或方法声明为friend
,或者更好地使用getter方法。
要克服2.,您需要包含引用类的标题。
答案 2 :(得分:0)
您可以使用模板:
表示:
#ifndef A_HH_
#define A_HH_
#include <string>
#include "b.h"
class a
{
private:
string aString;
b* bClass;
public:
a()
{
aString = "A";
bClass = new b<a>;
}
string getString(){return aString;}
string getBString(){return bClass->getString();}
};
#endif /* A_HH_ */
和b:
#ifndef B_HH_
#define B_HH_
#include <string>
template <typename T>
class b
{
private:
string bString;
T* aClass;
public:
b()
{
bString = "B";
aClass = new T;
}
string getString(){return bString;}
string getAString(){return aClass->getString();}
};
#endif /* B_HH_ */
这将删除循环依赖