在构造函数中声明具有CWnd类型成员和CString参数的类会导致C2248

时间:2015-01-19 15:31:03

标签: mfc visual-c++-2013

假设我们有一个声明如下的类:

class A {
private:
    CWnd wnd;
public:
    A(CString) {}
    ...
};

现在创建一个A的对象:

auto a = A{ CString{} };

编译器报告:

error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'

该代码有什么问题?

此问题有一个解决方法:将构造函数的签名更改为A(const CString&)可以解决问题。但我想知道为什么会报告错误。

1 个答案:

答案 0 :(得分:0)

CWnd构造函数是私有的。建议您从CWnd(或某些派生类)派生一个类,并使用指针作为您的成员变量。使用其中一个用于此目的的MFC函数动态创建窗口。