コンパイラの警告 C5243
'type': 不完全なクラス 'class-name' を使用すると、ABI の制限のために ODR 違反が発生する可能性があります。 クラスの事前宣言で継承キーワードを指定することで、この問題を回避できます。
解説
Microsoft C++ ABI は、複数の種類のメンバーへのポインター型を使用します。 これらの型のサイズは、クラスで使用される継承モデルによって異なります。 C++ 標準では、メンバーへのポインターの不完全なクラス型を宣言できます。 不完全なクラスに対してメンバーへのポインター型の変数を宣言する場合、コンパイラは最も一般的な表現を使用する必要があります。 コンパイラは、完全なクラス型が使用可能な他の変換単位で、このメンバーへのポインター型に対して、より小さく、より具体的な表現を使用する可能性があるため、1 つの定義ルールまたは ODR 違反につながる可能性があります。
このエラーを解決するには、メンバーへのポインター変数を宣言する前に、完全なクラス型を指定できます。 または、Microsoft 固有の継承キーワードを使用して、不完全な転送クラス宣言で正しい継承モデルを指定します。
コンパイラの警告 C5243 は、Visual Studio 2019 バージョン 16.10 の新機能であり、既定でオフになっています。 この警告を有効にする方法については、「既定で無効になっているコンパイラ警告」を参照してください。