2012-10-26 106 views
0

在這裏需要一些指導C++結構上類

我有一個代碼是

struct Point 
{ 
    int x; 
    int y; 
}; 

然後在我的班級我有一個功能

class MyClass 
{ 
    private: 
     Point myPoint[4]; 
    public: 
    void setPoint(); 
}; 

void MyClass::setPoint() 
{ 
    int xData,yData; 

    for (int i=0;i<4;i++) 
    { 
     cout << "Please enter x-ordinate:"; 
     cin >> xData; 

     cout << "Please enter y-ordinate:"; 
     cin >> yData; 

     //at this part the code throw a segmentation core dump. 
     myPoint[i].x = xData; 
     myPoint[i].y = yData; 
    } 

} 

在第一次運行時沒有發生,但在第二個循環中,會發生分段核心轉儲。我的代碼有什麼問題?

上的main.cpp

#include "MyClass.h" 

int main() 
{ 
MyClass *mClass; 

mclass->setPoint(); 
} 

感謝您幫助其他代碼。

+1

「跑」對你意味着什麼?執行'setPoint'?創建一個'MyClass'? –

+0

編譯代碼並執行,然後我運行主類的setPoint函數,然後我鍵入值,並在第二次x座標提示時,拋出了分段核心轉儲錯誤。 – user1777711

+0

你可能從來沒有初始化你的結構? –

回答

4

您必須在使用前指針分配內存:

int main() 
{ 
    MyClass *mClass = new MyClass(); 
    mclass->setPoint(); 
    return 0; 
} 
+0

另外,使用'new'分配新對象時使用析構函數是一個好習慣。 – EyalAr

+0

謝謝。這有助於解決! – user1777711

+3

爲什麼是新的? 'MyClass mClass; mclass.setPoint();' – Aubin

0
MyClass *mClass; 

mclass->setPoint(); 

有你的問題就在這裏。你從來沒有分配過一個對象,只是一個指針。

int main() 
{ 
    MyClass mclass; 
    mclass.setPoint(); 
} 

作爲替代方案,如果你需要一個對象,其壽命超出你的變量的範圍,你可以用new分配的對象。

0

問題在於創建對象。更精確地在你的代碼中尚未創建object.Its只是一個指針其中有內存分配happened.It應該是這樣的:

MyClass *mClass = new MyClass(); 
mClass->setPoint(); 
0

你需要的內存分配你的對象

MyClass *obj = new MyClass(); 
       ^

是一種語言構造,動態分配內存

0

與建造一個對象有關。

MyClass *mClass; 

意味着你得到一個Myclass指針,這個指針能夠處理一個Myclass類型的對象,只是有能力。但你沒有「真正的對象」,「真正的對象」意味着你應用並獲得系統堆中的一塊內存。 然後

mclass->setPoint(); 

此呼叫裝置呼叫MYCLASS型的功能對象代替呼叫的MYCLASS級的功能。

所以,該代碼可能是正確的是:

​​

新關鍵字意味着應用的存儲器的塊爲一個MYCLASS型對象。