2

と呼ばれるクラスがfoo1あり、foo1.hにあります

class foo1
{
public:
int var;
foo1();
};

と呼ばれる別のクラスもあります。このクラスにはfoo2、以下に基づくオブジェクトがありますfoo1

class foo2
{
public:
foo1 *afoo1;
foo2();
void func1(int,int);
};

私の質問は、どうすればにアクセスできるかということafoo1->varです。afoo1->varfoo2.cppで使用すると、すべてが正常に表示され、エラーなしでコンパイルされます。しかし、コマンドプロンプトウィンドウで実行すると、ウィンドウが表示され、プログラムを閉じるように求められます。これは、私がメモリアクセスに違反しているためだと思います。その原因はである可能性がありますafoo1->var

誰かがこれを手伝ってくれますか?

ありがとう

追記

foo2からdllファイルを作成し、そのソースコードにアクセスできない別のプログラムで使用します。物事をもう少し明確にするためだけに。

答え

私は2つの間違いを犯しました。1つ目は、Nullを参照していたことです。afoo1 = new foo1();のコンストラクターでfoo2それを処理しました。

foo1.cpp2つ目は、makefileに含めていなかったことです。私は知っている、愚かな間違い。

4

2 に答える 2

0

あなたはする必要がありますfoo2Instance->afoo1->var、foo2メソッドの中でこれはただですafoo1->var。それがクラッシュしている場合はafoo1、foo2のコンストラクターで初期化していないことが原因である可能性が高くなります。

#ifndef FOO1_H
#define FOO1_H 

class foo1
{
public:
int var;
foo1() { var = 0; } //make sure the constructor is in fact defined. 
// if it isn't implemented it would cause that linker error.
};

#endif

#include "foo1.h"foo2.hにあることを確認してください

   // constructor and deconstructor, these are in the cpp file.
   foo2::foo2()
   {
        afoo1 = new foo1();
   }
   foo2::~foo2()
   {
        delete afoo1;
   }

NullReferenceExceptionが発生する場合は、コンストラクターでその行が欠落している可能性があります。ただし、自分のプロパティにアクセスしようとすると、毎回クラッシュする場合afoo2->afoo1は問題ありません。大丈夫ではありません。afoo1 == NULLafoo1NULL->someProperty

于 2012-11-16T00:20:17.817 に答える
0

foo2、foo1に基づくオブジェクトがあります

いいえ、foo1へのポインタがあります。foo1オブジェクトのインスタンスを実際に指すようにそのポインターを設定していない場合、それを介して何かにアクセスしようとすると、クラッシュが発生する可能性があります。それはあなたが経験していることのように聞こえます。

したがって、その変数を実際のfoo1foo1 afoo1;にする必要があるか(例:)、またはevanmcdonnalによって提案されているようにインスタンスを指すようにそのポインターを設定する必要があるように聞こえます(例:) afoo1 = new foo1();

于 2012-11-16T00:41:47.917 に答える