2013-05-16 146 views
-1

我在我的代碼中收到一個錯誤,我根本得不到。我的課程無法正常工作

這裏是我的代碼:

MyClass.h

#include "MyClass.h" 

int i = 1; 

MyClass::MyClass() 
{ 

} 

MyClass:~MyClass() 
{ 

} 

MyClass.cpp #PRAGMA一次

class MyClass 
{ 
    public: 
     MyClass(); 
     virtual ~MyClass(); 

     int i; 
    protected: 
    private: 
}; 

的main.cpp

#include<iostream> 
#include "MyClass.h" 

using namespace std; 

int main() 
{ 
    MyClass myObject = *new MyClass(); 

    cout << myObject.i << endl; 
    cin.get(); 
} 

我只是得到一些隨機數。這裏有幫助嗎?

+0

你正在泄漏記憶。只需創建如下對象:'MyClass myObject;' - 將調用放到'new'。 –

+1

您的'MyClass.h'和'MyClass.cpp'標籤看起來放錯了位置。 –

+1

我欣賞編譯的代碼。你的不是。 – chris

回答

2

您還沒有初始化在類i,你的構造應該是這個樣子:

MyClass::MyClass() : i(1) 
{} 

它也像你有幾個錯別字,這樣的:

MyClass myObject = *new MyClass(); 

應該是:

MyClass *myObject = new MyClass(); 

這:

cout << myObject.i << endl;  

應該是:

cout << myObject->i << endl; 

雖然,正如克里斯說,簡單的辦法是如下:

MyClass myObject ; 

cout << myObject.i << endl; 
+0

我會去'MyClass myObject;'而不是指針:) – chris

+0

@chris是的,我知道,我只是想盡量接近OP的代碼。我修改了我的答案,認爲這是一種更簡單的方法。 –

0

你設置爲1我是不是類的成員。它是任何類之外的靜態變量。

0

一旦我屬於你的類,你需要初始化它的構造

#include "MyClass.h" 

// int i = 1; <-- not here 

MyClass::MyClass() 
{ 
    i = 1; // here 
} 

內,以初始化主要功能您的對象只是做這樣的事情:

int main() 
{ 
// MyClass myObject = *new MyClass(); <-- myObject is not a pointer 
    MyClass myObject; 

    cout << myObject.i << endl; 
    cin.get(); 
} 
+0

這不是初始化。這是任務。當你嘗試調用一個構造函數,或者使用一個const或引用,或者類似的東西時,它會有所不同。 – chris

0

兩件事情錯了:首先,您在MyClass.cpp中重新聲明我,請嘗試在構造函數中指定它:

//int i = 1; 

MyClass::MyClass() : i(1) 
{ 

} 

其次,你在main()中聲明對象的方式也是錯誤的。要麼你做:

int main() 
{ 
    MyClass* myObject = new MyClass(); 

    cout << myObject->i << endl; 
    cin.get(); 

    delete myObject; 
} 

如果你想有一個指針指向一個動態分配的對象,或只是

int main() 
{ 
    MyClass myObject; 

    cout << myObject.i << endl; 
    cin.get(); 
} 
如果你想在棧上分配的對象