为什么不干脆写代码:
CListCtrl ctl = GetListCtrl();
或:
CListCtrl ctl;
ctl = GetListCtrl();
无论哪一种写法,似乎更符合我们一般的逻辑思维,但执行结果都是通不过编译的。
正确写法:
CListCtrl* ctl = &GetListCtrl();
或
CListCtrl& ctl = GetListCtrl();
返回一个CListCtrl类型?返回一个类的实例这是有违C++的编程常理的吧,效率太低了。它返回的是一个CListCtrl的引用,而不是一个CListCtrl.
至于要解释的话,估计楼主看不懂,简单提一点:
C++类的构造函数,如默认构造函数,如果被这样定义
class X {
protected:
X();
};
那么我们不能创建它的实例了:
X x;//导致编译出错
道理是因为构造函数不对外,我们在外面无法使用构造函数。
那么如果CListCtrl的构造函数也是这样做的,是不是就能解释楼主的奇怪问题以及正确答案了呢? 两种正确答案的代码都是力争避开调用不公开的构造函数,这个是写代码的初衷也是答案。