3

以下のシナリオを検討してください。

ヘッダー ファイルとそれに対応するソース ファイルがあります。

exmp.h (ヘッダーファイル)

exmp.cpp (ソースファイル)

bubSort(...)ヘッダーファイルには、定義が存在する関数宣言があります

exmp.cpp

myClass::bubSort(...)
{

....
....

}

ここで、はexmp.hmyClass->で定義されたクラスです

bubSort(...)別のファイルSample.cppで関数を使用するために、以下に示すようにSample.hmyClass内で宣言しました。

/*Sample.h*/
class myClass;

class sampleClass
{

  .....
  .....
  myClass *ptr;
};

上記を使用して、以下に示すように Sample.cppptrにアクセスしようとしています。bubSort(...)

//Sample.cpp
#include "exmp.h"
sampleClass::func(...)
{
     ....
     ....
     ptr->bubSort(...);
}

上記のシナリオでは、コンパイル中にエラーは発生しませんが、実行中にコントロールが に達するptr->bubSort(...);と、例外が発生します。

アクセス違反読み取り箇所 0xcdcdcdcd

これを回避する方法を誰か教えてください。

前もって感謝します。

4

5 に答える 5

1

これを解決するには (考えられる方法の 1 つ)、myClass オブジェクトが存在するアドレスを実際に指すように 'ptr' を作成する必要があります。存在するためには、それを作成する必要があります。

class sampleClass
{
public:
   sampleClass()
   {
       ptr = new myClass();
   }
private:
   myClass* ptr;
};

ただし、生のポインターの代わりに C++11 の unique_ptr または shared_ptr を使用することを検討することもできます。

于 2013-08-01T12:13:40.873 に答える
0

星が見える。
これは代わりに機能しますか?

class sampleClass
{

  .....
  .....
  myClass ptr;
};

何をしているのかわからない場合は、ポインタを使用しないでください。

于 2013-08-01T12:12:42.117 に答える