C++ 结构的转发声明无效

C++ 结构的转发声明无效,c++,forward-declaration,C++,Forward Declaration,--编辑-- 很抱歉,我把大家弄糊涂了,我只是很快地把这段代码打印出来,而不是复制粘贴,所以我实际上在我的代码中定义了一个。我更改了下面的代码以显示 --结束编辑-- 我有两个类,每个类都包含一个指向另一个类实例的指针,但这给我带来了问题。我的代码类似于下面的代码 // A.h #ifndef A_H #define A_H class B; // compiler error here class A { B* foo; // other members and functions

--编辑-- 很抱歉,我把大家弄糊涂了,我只是很快地把这段代码打印出来,而不是复制粘贴,所以我实际上在我的代码中定义了一个。我更改了下面的代码以显示
--结束编辑--

我有两个类,每个类都包含一个指向另一个类实例的指针,但这给我带来了问题。我的代码类似于下面的代码

// A.h
#ifndef A_H
#define A_H

class B; // compiler error here

class A
{
  B* foo;
  // other members and functions
};

#endif

// A.cpp
#include "A.h"
#include "B.h"
/*
 declare functions and use methods in both A and B
*/

// B.h
#ifndef B_H
#define B_H

class A;

class B
{
  A** bar;
// other stuff
};

#endif

//B.cpp
#include "A.h"
#include "B.h" 
/*
declare functions and use methods in both A and B
*/
有人告诉我,在头文件中向前声明另一个类,然后在cpp文件中包含另一个文件将起作用,但在标记的行中,我得到一个错误,只是说“向前声明'struct b'”


有人能告诉我我做错了什么吗?

包括一个标题,比如说a.h中的b.h。不要在a.h中向前声明b.h。b.h可以保持原样

否则你会得到类似的东西

class B {};
....
class B;

只对这样的错误进行预处理总是明智的。

我将大胆猜测一下,你的include卫士把类名弄乱了。同意,
#define blah\n class blah
将被
class[此处无任何内容]
@Raphael替换。我建议你阅读一些正宗的POSIX源代码。他们总是使用
\ifndef\uu FILENAME\u H\uu
等@H2CO3,真的吗?这很糟糕(至少对于非实现代码而言)。我同意背后的逻辑,但是。我总是使用
FILENAME\u H
@OP,以及注释掉的包含,代码。