比如声明两个类A和B
A中声明一个B类的成员变量,B类声明一个A类的成员变量,VC就会生成一大堆错误报告,我估计是头文件的问题,请那位高人给指点一下

解决方案 »

  1.   

    class A;
    #include "b.h"
    class A{}#inlcude "a.h"
    class B{}
      

  2.   

    这个还不是头文件的问题
    "A中声明一个B类的成员变量,B类声明一个A类的成员变量."
    我认为这种设计根本就是错误的,构造函数的扩展就会把编译器逼疯.
      

  3.   

    可能头文件重复包含了
    你可以这样定义
    //在A类的头文件.h中
    class B;  //在这里定义但不include
    class A : public ...

     protected:
       B m_b;  //成员变量
    }在A类的.CPP中
    #include "..b.h"在B类的头文件中
    #include "...A.h"  //在这里include
    class B : public ...
    {
      protected:
        A m_a;//成员变量
    }
      

  4.   

    >"A中声明一个B类的成员变量,B类声明一个A类的成员变量."这个是不可能的,这是递归包含,无法创建实例。解决问题的方法是A中包含B的实例的指针,B中包含A实例的指针。然后其中一个h文件不要include另一个h文件,而是使用class A;这样的声明。
      

  5.   

    还是有问题
    源文件:
    A.h:// A.h: interface for the A class.
    //
    //////////////////////////////////////////////////////////////////////#if !defined(AFX_A_H__A1AD226B_34B1_416F_9CDB_8FC2464AC2C5__INCLUDED_)
    #define AFX_A_H__A1AD226B_34B1_416F_9CDB_8FC2464AC2C5__INCLUDED_class B; // Added by ClassView
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000class A  
    {
    public:
    B m_b;
    A();
    virtual ~A();};#endif // !defined(AFX_A_H__A1AD226B_34B1_416F_9CDB_8FC2464AC2C5__INCLUDED_)B.h:// B.h: interface for the B class.
    //
    //////////////////////////////////////////////////////////////////////#if !defined(AFX_B_H__ED4B25AE_6861_4C24_8766_F4C8C192B766__INCLUDED_)
    #define AFX_B_H__ED4B25AE_6861_4C24_8766_F4C8C192B766__INCLUDED_#include "A.h" // Added by ClassView
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000class B  
    {
    public:
    A m_a;
    B();
    virtual ~B();};#endif // !defined(AFX_B_H__ED4B25AE_6861_4C24_8766_F4C8C192B766__INCLUDED_)错误为:B.cpp
    c:\program files\microsoft visual studio\myprojects\consoleapp\a.h(16) : error C2079: 'm_b' uses undefined class 'B'
    Generating Code...
    Compiling...
    A.cpp
    c:\program files\microsoft visual studio\myprojects\consoleapp\a.h(16) : error C2079: 'm_b' uses undefined class 'B'
      

  6.   

    这样:A.h:// A.h: interface for the A class.
    //
    //////////////////////////////////////////////////////////////////////#if !defined(AFX_A_H__A1AD226B_34B1_416F_9CDB_8FC2464AC2C5__INCLUDED_)
    #define AFX_A_H__A1AD226B_34B1_416F_9CDB_8FC2464AC2C5__INCLUDED_class B; // Added by ClassView
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    class B;
    class A  
    {
    public:
    B* m_pb;
    A();
    virtual ~A();};#endif // !defined(AFX_A_H__A1AD226B_34B1_416F_9CDB_8FC2464AC2C5__INCLUDED_)B.h:// B.h: interface for the B class.
    //
    //////////////////////////////////////////////////////////////////////#if !defined(AFX_B_H__ED4B25AE_6861_4C24_8766_F4C8C192B766__INCLUDED_)
    #define AFX_B_H__ED4B25AE_6861_4C24_8766_F4C8C192B766__INCLUDED_#include "A.h" // Added by ClassView
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    class A;
    class B  
    {
    public:
    A* m_pA;
    B();
    virtual ~B();};
      

  7.   

    在你的b.cpp中要include "a.h",而且是在include "b.h"之前