0
class MyClass : public CObject
{
public:
   MyClass();

private:
   CStringArray m_myArray;
};

エラーc2248を引き起こします

これの何が問題になっていますか?これは、CStringArrayとMyClassの両方がCObjectから派生しているという事実に関連していると思います。

CObjectから派生したレガシークラスは現在CustomArrayを使用しているので、私には間違っているように思われるので、CStringArrayに置き換えたいと思います。

4

3 に答える 3

1

MicrosoftコンパイラエラーC2248は、「派生クラスのメンバーは基本クラスのプライベートメンバーにアクセスできない」ことを意味します。

MyClass::m_myArrayパブリックアクセサー関数を使用せずに、コードのどこかから直接参照しようとしていると想定できます。

更新 本当の答えは、問題の原因はMyClassのコピーコンストラクターがm_myArrayをコピーしようとしていることですが、CObject派生クラスはデフォルトではコピーできないため、コピーできません。解決策は、コピーコンストラクターを自分で作成し、配列をコピーするのではなく、ソース配列から宛先配列にコンテンツを一度に1つずつコピーすることです。それか使用std::vectorしてください(MFCコンテナはひどいので、とにかく行う必要があります)。

于 2012-09-21T12:55:50.990 に答える
0

エラーC2248には、「派生クラスのメンバーは基本クラスのプライベートメンバーにアクセスできません」と表示されます。

CStringArrayクラスは、コピーコンストラクターと代入演算子を公開しません。そのような場所をコードで探し、コードをelemenet byelemnetcopyに置き換えます。

于 2012-09-24T08:21:45.997 に答える
0

のプライベートメンバーにアクセスしようとしていますCObject。あなたMyClassCStringArrayから派生しているのでCObject、より多くの文脈がなければ、正確な問題を知ることは不可能です。

基本的に私が何度も罠に陥ったために頭に浮かぶ唯一のアイデアは、CObjectコピーコンストラクターがプライベートであるということです。したがってCStringArray、明示的または暗黙的に、または独自のクラスをコピーしようとしている場合は、エラーが発生します。

更新:
の宣言を 見たところCObject、代入演算子もプライベートです。それ以外はすべて公開または保護されています。

于 2012-09-24T07:47:56.503 に答える