-1

私はC++に非常に慣れていません。次の手順を実行すると、システムがクラッシュします(コンパイルエラーではありません)。

クラスのグローバルポインタを宣言しています。

BGiftConfigFile  *bgiftConfig;
class BGiftConfigFile : public EftBarclaysGiftConfig { }

このクラスでは、XMLファイルからタグを読み取っています。このポインタを使用して値を取得すると、システムがクラッシュします。ベリフォン端末のコーディングをしています。

int referenceSetting = bgiftConfig->getreferencesetting(); //system error

getreferencesetting()は、クラスEftBarclaysGiftConfigのメンバー関数です。

この場合、ポインタの動作について混乱しています。私は何か間違ったことをしていることを知っていますが、それを修正することができませんでした。

クラスの1つのオブジェクトをローカルで宣言すると、値が適切に取得されます。

BGiftConfigFile  bgiftConfig1; 
int referenceSetting = bgiftConfig1.getreferencesetting(); //working

しかし、このオブジェクトをグローバルとして宣言すると、システムもクラッシュします。

コード内の別の場所で値をフェッチする必要があるため、グローバルなものを使用する必要がありました。

この問題を修正するにはどうすればよいですか?

4

3 に答える 3

1

あなたのローカルは、スタックに割り当てられたインスタンスです。

グローバルはポインターであり、使用を開始する前に new の呼び出しを介して割り当てる必要があります。

bgiftConfig = new BGiftConfigFile();
于 2010-04-16T05:58:09.083 に答える
1

最初にクラス BGiftConfigFile を前方宣言し、次にクラスのオブジェクトへのポインターを次のように宣言します。

class BGiftConfigFile
 BGiftConfigFile  *bgiftConfig;
class BGiftConfigFile : public EftBarclaysGiftConfig { };

次に、 new 演算子を使用してポインター オブジェクトにスペースを割り当てます

bgiftConfig = new BGiftConfigFile(); // depends upon what constructors you have defined in your class

ポインターの削除が完了したら、削除演算子を使用して割り当てます

delete bgiftConfig;
于 2010-04-16T06:00:22.933 に答える
1

コード内の別の場所で値をフェッチする必要があるため、何らかのグローバルを使用する必要がありました。

いいえ、グローバルなものは必要ありません。このオブジェクトの非グローバル インスタンスを、それを必要とするコードに渡すことができます。

于 2010-04-16T07:42:40.487 に答える