2014-03-30 134 views
0

我在代碼中發現了這個問題,但我不明白它爲什麼會像這樣工作。我試圖實現靜態實例從靜態調用非靜態方法。我真的需要這個,因爲我使用的SDK結構不完善(Marmalade)。從靜態調用非靜態方法的實例

我得到Marmalade的錯誤,我試圖刪除在時間似乎正在使用的對象。但如果我改變了這一行:instance.http = new CIwHTTP(); 到這一行:http = new CIwHTTP(); 錯誤消失。

但是它爲什麼會這樣工作?我認爲這個實例 - 這是我的類的引用,就像一個「this」變量。爲什麼這裏有很多不同?我認爲這裏沒有任何區別:「http。」和「instance.http」。但我怎麼能做到這個「這個」引用這個類在靜態方法中使用它?

===[ HTTP.h ]=== 
#ifndef HTTP_H 
#define HTTP_H 
#include <s3e.h> 
#include "IwHTTP.h" 
class HTTP { 
public: 
    CIwHTTP *http; 
    HTTP(); 
    ~HTTP(); 
}; 
#endif 

===[ HTTP.cpp ]=== 
#include "HTTP.h" 
static HTTP instance; 
char* result = NULL; 
HTTP::HTTP() { 
    instance.http = new CIwHTTP(); 
} 
HTTP::~HTTP() { 
    if (http) { 
     delete http; 
    } 
    s3eFree(result); 
} 

回答

1

請勿放置「實例」。在HTTP構造函數中。否則,你永遠不能有多個實例。

+0

但是爲什麼?我根本不明白這個遊戲的規則:) – JavaRunner

+0

@JavaRunner因爲任何HTTP對象的構造函數,都會修改實例內的http指針。如果你創建了'static HTTP instance2',你期望構造函數做什麼? –

+0

我期望它們會相互平等:)我需要創建類似「this」的引用,以便從靜態方法訪問我的所有成員。 – JavaRunner

相關問題