1

私はMFCプログラミングの初心者です。最近は Jeff Prosise の本を使って MFC プログラミングを学んでいます。私は遭遇しました:CClientDC dc (this);そして私はCClientDCクラスの定義からコンストラクター関数を見つけました:CClientDC(CWnd* pWnd);しかし、私CClientDC dc (this);CClientDC dc = CClientDC(this);. コンパイラは、これは間違いだと言いました。理解できません。CClientDC dc (this);と同じことだと思いますCClientDC dc = CClientDC(this);。つまり、前者は単純な形です。

どうもありがとう。

4

3 に答える 3

7
CClientDC dc = CClientDC(this);

と同等です

CClientDC dc(CClientDC(this));

このためには、基本的に一時オブジェクトからコピーしてCClientDC構築するため、コピーまたは移動コンストラクターが必要です。dc

初期化が [...] ソース型の cv 修飾されていないバージョンが [...] 宛先と同じクラスであるコピー初期化である場合、コンストラクターが考慮されます。[...] そのように選択されたコンストラクターは、初期化式または式リストを引数として使用して、オブジェクトを初期化するために呼び出されます。コンストラクターが適用されない場合、またはオーバーロードの解決があいまいな場合、初期化は不適切な形式です。

于 2013-04-08T09:41:41.243 に答える
0

CClientDC dc = CClientDC(this) を正常に実行するには、 cwind* をパラメーターとして取り、 CClientDC を返す CClientDC のオーバーロードされたコンストラクターが必要です。しかし、それは存在しません。したがって、コンパイラはエラーを出しています。

于 2013-04-08T09:57:23.707 に答える