struct的前向声明无效

时间:2012-09-09 17:56:42

标签: c++ forward-declaration

- 编辑 - 很抱歉我混淆了人们,我只是快速输入这个代码而不是复制和粘贴,所以我实际上在我的代码中执行#ifndef A_H #define A_H。我已经改变了下面的代码来表明这一点 - 结束编辑 -

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

// 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
*/

有人告诉我,前面声明另一个类int头文件然后包含cpp文件中的另一个文件会起作用,但是在标记的行上我得到一个错误,只是说'struct b'的前向声明'< / p>

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:3)

包含一个标题,比如说a.h中的b.h.不要在a.h中转发声明B. b.h可以保持不变。

否则你会得到......

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

仅对这些错误进行预处理总是明智的。