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);
}
但是爲什麼?我根本不明白這個遊戲的規則:) – JavaRunner
@JavaRunner因爲任何HTTP對象的構造函數,都會修改實例內的http指針。如果你創建了'static HTTP instance2',你期望構造函數做什麼? –
我期望它們會相互平等:)我需要創建類似「this」的引用,以便從靜態方法訪問我的所有成員。 – JavaRunner