简单的头文件嵌套问题,给一个解决方案 a.h#include "d.h"d.h#include "b.h"b.h#include "a.h"在b.h里用class a;那种方法不行,必须要在b里用a 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // in file a.h#ifndef _A_H#define _A_H#include "d.h"#endif #ifndef XXXXX#define XXXXX......#endif这样就可以解决了。还是不太明白楼主说的问题到底是什么。 这种循环头文件包含对编译器可是一个考验啊,必须要避免重复include,常用的方式就是用宏开关。另外VC的编译器cl.exe可使用/Zm参数设定编译器内存分配上限。See details in MSDN please! 问题可以简化成这样class A {public: A(); virtual ~A();public: B b;};class B {public: B(); virtual ~B();public: A *a;};实际上是这样,A是父窗口,B是子窗口,现在,在B里需要调A的方法,怎么办 不会吧,这也没法优化,整个程序是个控件,A是父窗口,同时负责和外面的数据交换,这个是不能改的,B是A 创建的子窗口,在B上点击鼠标,这个消息肯定是B收到,现在的要求就是在B上点鼠标,然后向外面发送XML,这接口只能在A里面,所以,我肯定要调A的方法 类的聚合,我写的示例如下:class A {public: A():m_b(this) {}; virtual ~A() {}; void CallB() { TRACE("Object A: Call B.\n"); m_b.DoIt(); }; void DoIt() { TRACE("Object A: Do it OK.\n"); }; class B { public: B(A* pA) {m_pA = pA;}; virtual ~B() {}; void DoIt() { TRACE("Object B: Do it OK.\n"); }; void CallA() { TRACE("Object B: Call A.\n"); m_pA->DoIt(); }; A* m_pA; friend class A; } m_b;};void CTestDlg::OnButton1(){ A a; a.CallB(); TRACE("\n"); a.m_b.CallA();}输出:Object A: Call B.Object B: Do it OK.Object B: Call A.Object A: Do it OK. 这个错误怎么改呢? 时间真快……去年此时我正在奋战于CET-6考场 何如设置MapX放大缩小的次数 MFC中对话框加菜单后,如何改变其背景色 全局变量存储问题??? 50分请问一个基础的问题:对话框上有2个edit控件和一个按钮,在一个edit中输入字符,点击按钮后,另一个edit控件中显示刚才输入到第一个e 头疼,如何修改虚拟端口? 请问如何用VC获得机器的CPU ID。 线程及其其他的问题 真的很无奈!!! 一个进程间的通信问题 请问有什么办法可以将窗口设为透明窗体?
#ifndef _A_H
#define _A_H
#include "d.h"
#endif
#define XXXXX......#endif这样就可以解决了。还是不太明白楼主说的问题到底是什么。
的方式就是用宏开关。
另外VC的编译器cl.exe可使用/Zm参数设定编译器内存分配上限。See details in MSDN please!
class A
{
public:
A();
virtual ~A();public:
B b;};class B
{
public:
B();
virtual ~B();public:
A *a;
};实际上是这样,A是父窗口,B是子窗口,现在,在B里需要调A的方法,怎么办
class A {
public:
A():m_b(this) {};
virtual ~A() {}; void CallB() {
TRACE("Object A: Call B.\n");
m_b.DoIt();
}; void DoIt() {
TRACE("Object A: Do it OK.\n");
}; class B {
public:
B(A* pA) {m_pA = pA;};
virtual ~B() {}; void DoIt() {
TRACE("Object B: Do it OK.\n");
}; void CallA() {
TRACE("Object B: Call A.\n");
m_pA->DoIt();
}; A* m_pA; friend class A;
} m_b;
};void CTestDlg::OnButton1()
{
A a;
a.CallB();
TRACE("\n");
a.m_b.CallA();
}输出:
Object A: Call B.
Object B: Do it OK.Object B: Call A.
Object A: Do it OK.