【发布时间】:2012-11-14 10:15:48
【问题描述】:
我有一个关于通函的问题,这让我抓狂:
main.cpp
#include "A.hpp"
#include "B.hpp"
int main()
{
A a();
B b();
return 0;
}
A.hpp
#ifndef _CLASS_A
#define _CLASS_A
#include "B.hpp"
class A
{
public:
B* b;
struct A_t
{
int id;
};
};
#endif
B.hpp
#ifndef _CLASS_B
#define _CLASS_B
#include "A.hpp"
class B
{
class A; //Ok, with that I can use the class A
public:
int a;
A* b; // That work!
A::A_t *aStruct; // Opss! that throw a compilation error.
};
#endif
问题是:¿如何在 B 类中使用 A_t 结构?
我尝试添加如下前向声明:
struct A::A_t;
但这显然确实有效。
【问题讨论】:
-
请注意,当我们说
throw与错误有关时,它通常意味着在运行时,即异常。如果您有编译器错误消息,请告诉我们它是什么。 -
一一;或 A *a= 新 A();这个例子并不重要,这里只是为了说明我需要创建一个对象。
标签: c++ struct circular-dependency