2010-04-16 54 views
-1

我對C++很陌生。我在執行以下操作時遇到了系統崩潰(不是編譯錯誤):聲明該類的全局對象後系統崩潰

我正在聲明類的全局指針。

BGiftConfigFile *bgiftConfig; 
class BGiftConfigFile : public EftBarclaysGiftConfig { } 

這個類中我正在從XML文件讀取標籤。當使用該指針來檢索值時,系統崩潰。我正在爲verifone終端進行編碼。

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

getreferencesetting()是類EftBarclaysGiftConfig

我感到困惑在這種情況下指針的動作的成員函數。我知道我做錯了事,但無法糾正它。

當我在本地聲明一個類的對象時,它會正確地檢索值。

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

但是,如果我聲明這個對象是全局的,它也會崩潰系統。

我需要在我的代碼中的不同位置獲取值,所以我不得不使用全局的東西。

如何糾正這個問題?

+1

什麼創建指針指向的對象? – 2010-04-16 05:45:50

+0

我正在使用'。'引用本地實例。 – 2010-04-16 05:51:57

+0

你的本地是一個堆棧分配的實例。你的全球化是一個指針。你是否分配它(如bgiftConfigFile = new BGiftConfigFile();)? – 2010-04-16 05:52:49

回答

1

你的本地是一個堆棧分配實例。

您的全球是一個指針,需要你開始使用它之前必須通過新的呼叫分配:

bgiftConfig = new BGiftConfigFile(); 
+2

全局變量具有靜態存儲持續時間,並且已經進行了零初始化。 – 2010-04-16 06:47:24

+0

是的 - 刪除.. – 2010-04-16 07:31:34

1

首先向前聲明類BGiftConfigFile,然後宣佈你的指針指向對象的類,如下所示

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

然後使用新的運營商爲您的指針對象分配空間

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

你與你的指針完成後刪除它佔有使用delete運算符

delete bgiftConfig; 
+1

聲明全球和管理它比需要更復雜的。 – 2010-04-16 06:04:16

+0

actully不可能將對象傳遞給函數。我們不會調用函數只是返回間接調用函數的下一個事件 – 2010-04-16 06:12:07

1

我需要在我的代碼來獲取不同的位置值,所以我被迫使用成才全球。

不,你不需要全局的東西。您可以將此對象的非全局實例傳遞給需要它的代碼。