比如声明两个类A和B
A中声明一个B类的成员变量,B类声明一个A类的成员变量,VC就会生成一大堆错误报告,我估计是头文件的问题,请那位高人给指点一下
A中声明一个B类的成员变量,B类声明一个A类的成员变量,VC就会生成一大堆错误报告,我估计是头文件的问题,请那位高人给指点一下
解决方案 »
- 关于MSchart折线图 设置某些数据点的颜色问题?
- 有关CListCtrl的LVS_REPORT的问题
- 请问如何HOOK某个类的成员函数?
- 有限元网格划分程序设计-绝对给分
- 谁有播放MP3的算法?谢谢!!
- 关于DDX_Control的问题
- 郁闷的问题!高手帮帮忙!
- 急问:VC Report风格 List Control控件,怎么让鼠标移动到列头时,响应该列对应事件?
- 如何设置多个组合键为热键
- installshield8.0中sdFeatureTree设置问题!急!!!
- 在ActiveX控件中,如何使用ATL编程实现internet文件的同步下载?
- 请问:调用一个子程序,程序执行完毕后自动将整个程序关闭了。这是怎么回事阿
#include "b.h"
class A{}#inlcude "a.h"
class B{}
"A中声明一个B类的成员变量,B类声明一个A类的成员变量."
我认为这种设计根本就是错误的,构造函数的扩展就会把编译器逼疯.
你可以这样定义
//在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;//成员变量
}
源文件:
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'
//
//////////////////////////////////////////////////////////////////////#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();};