Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303578
  • 博文数量: 45
  • 博客积分: 1429
  • 博客等级: 上尉
  • 技术积分: 422
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-19 09:12
文章分类

全部博文(45)

文章存档

2021年(1)

2020年(1)

2019年(1)

2016年(4)

2015年(3)

2011年(4)

2010年(31)

我的朋友

分类: C/C++

2010-07-07 20:42:39

这样一个架构:

一个主类,主界面是其成员类。另外有很多类与他有关(要刷新主界面),作为他的成员变量。但是只将必要的类(初始化、配置)在构造函数中实例。

主程序中,实例化这个主类。同时调用主类中的BindGui()方法,将其他的类在此方法中实例化。由于在这些类中往往要设置主界面的一些参数值,所以主类要作为这些类构造函数的形参。

这就有一个情况,如果在BindGui()中先后实例了A B两个类,而A是主类的成员类,假如主类名为s,作形参传入B的构造函数,那么按道理在B类中应该是可以调用s->A的成员函数,但事实证明这是不可以的。(我在B类构造函数中connect了A类的方法(QT),编译报错,connect 主界面上控件的槽是可以的)

一开始觉得这个应该涉及到拷贝构造函数的问题,这里没有定义拷贝构造函数,那么应该是默认的,由于成员类A没有在主类s的构造函数中实例,所以拷贝构造函数中应该也没有实例A,所以传过来的实参应该也就没有A的实例,故B中就没法调用A的方法,(这种想法应该不正确,待查阅)

仅从分析角度出发,如果在主类构造函数中实例A的话,应该不会有这用问题。但是经测试,给主类s添加一个成员类C,构造函数中实例C,此时在B中connect链接C的槽还是编译不过,就是直接调用C中方法也不行。于是说明,问题并不在这里——并不是实例化位置的问题。


又跑去再倒腾了一番,发现:主类的头文件中在声明主类前,将主类成员中将要用到的类都列了一遍,class A; class B;等等,在cpp中将这些类的定义头文件include进来。这样主类算是认识了这些成员类。但是在成员类的构造函数所在文件会不会找不到、不认识要调用的类的方法。果然,在B的构造函数文件中,#include “C.h”,一切编译错误都没有了,原来这个文件中只是包含了主类的头文件,而主类头文件没有包含其他的头文件,只是class了一下。

阅读(1353) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~