我正在嘗試查找動態和靜態實例化的對象編號。我得到錯誤,變量myheap沒有聲明。靜態類成員聲明錯誤
#include<iostream.h>
#include<stdlib.h>
class A {
public:
static int x; //To count number of total objects. incremented in constructor
static int myheap; //To count number of heap objects. Incremented in overloaded new
void* operator new(size_t t) {
A *p;
p=(A*)malloc(t);
myheap++;
return p;
}
void operator delete(void *p) {
free(p);
myheap--;
}
A() {
x++;
}
~A() {
x--;
}
};
int A::x=0;
int A::myheap=0;
int main() {
A *g,*h,*i;
A a,c,b,d,e;//Static allocations 5
g= new A();//Dynamic allocations 3
h= new A();
i= new A();
cout<<"Total"<<A::x<<'\n';
cout<<"Dynamic";
cout<<'\n'<<"HEAP"<<A::myheap;
delete g;
cout<<'\n'<<"After delete g"<<A::x;
cout<<'\n'<<"HEAP"<<A::myheap;
delete h;
cout<<'\n'<<"After delete h"<<A::x;
cout<<'\n'<<"HEAP"<<A::myheap;
delete i;
cout<<'\n'<<"After delete i"<<A::x;
cout<<'\n'<<"HEAP"<<A::myheap;
}
固定myheap至A後:: myheap它的工作。我更新了代碼及其工作。感謝所有 當我不是從新返回p時,它發出警告並編譯。但是在執行時給了核心轉儲。任何原因? – Sandeep 2010-01-06 04:30:40
除了點但仍然非常相關,使用無擴展頭文件版本,即iostream&cstdlib而不是iostream.h&stdlib.h,後者是一個C頭文件,您在C++項目中使用,爲此刪除.h並在標題名稱前添加ac以爲您提供C++頭文件。你使用的是古老的,雖然它們可能不會在你的代碼中拼寫錯誤,但是在現代編譯器中,在將來肯定會成爲一個問題。有關我的意思請參閱此文章的完整說明http://members.gamedev.net/sicrane/articles/iostream.html – rocknroll 2010-01-06 09:37:00