1

ネイティブ C++ クラスのラッパーとして作成した一連の C++/CLI クラスがあります。C++/CLI クラスの場合: クラス宣言のプライベート セクション内にコンストラクター宣言を配置し、それらを実装しませんでしたが、実装されていないコンストラクターがある場合は常にリンカー エラーが発生します。

C++/CLI で既定のコンストラクタを削除する適切な方法は何ですか?

4

2 に答える 2

4

これはリンカーを使用するため、ネイティブ C++ で機能します。誰もそれを要求しない場合、欠落しているメンバーの実装に満足しています。しかし、それはマネージ コードでは機能せず、リンカを使用しません。クラス定義はアセンブリ メタデータにコピーされ、バインドは実行時に動的に行われます。

これには、宣言されたすべてのメンバーに表現が必要です。それ以外の場合、メタデータは不完全になり、リフレクションが壊れるためサポートされません。プライベート会員でも。解決するのが特に難しいことは何もありません{}が、プライベート コンストラクターの完全に適切な実装です。

于 2013-04-14T21:49:56.443 に答える
0

コンストラクタとデストラクタの宣言をクラス宣言のプライベート セクション内に配置し、それらを実装しませんでしたが、実装されていないコンストラクタまたはデストラクタがある場合は常にリンカー エラーが発生します。

コンストラクターを非公開にしたからといって、それらを実装する必要がなくなるわけではありません。あなたはまだそれを呼んでいます。あなたはそれを実装する必要があります。

于 2013-04-14T21:23:31.217 に答える