2013-10-06 178 views
-1

我需要知道爲什麼這個程序在我編譯時終止。我不明白終止的原因是什麼。 請告訴我他們的問題也是他們的解決方案。 謝謝。C++程序終止

#include<iostream.h> 
class citizen{ 
    private: 
      char* name; 
      char* nationality; 
    public: 

     citizen(){ 
        name = "No name is given"; 
        nationality = "No nationality is given\n"; 
     } 
     citizen(char* name, char* nationality){ 
      this->name = name; 
      this->nationality = nationality; 
     } 

     void display(){ 
       cout << "Name: " << name << endl; 
       cout << "Nationality: " << nationality << endl; 
     } 

     ~citizen(){ 
      if(name){ 
         cout << endl << "\nGoing to delete: "<< name << endl; 
         delete []name; 
      } 
      if(nationality){ 
         delete []nationality; 
         cout << "Going to nationality: "<< nationality << endl; 
      } 

     } 

     citizen(const citizen &obj){ 
         int size = sizeof(obj.name); 
         name = new char[size+1]; 
         strcpy(name, obj.name); 

         int size2 = sizeof(obj.nationality); 
         nationality = new char[size2 + 1]; 
         strcpy(nationality, obj.nationality); 
         cout << "\nI'm copy construcotr\n"; 

     } 
}; 
+3

如果您使用的是C++,那麼使用'string'代替c-style字符串有什麼危害。 – Arpit

+0

在你的析構函數中使用'delete []'會導致你在你的拷貝構造函數沒有創建你的對象的時候遇到很大的問題,就像在試圖刪除它之後嘗試輸出'nationality'一樣。 –

+6

不不不不!現在停下來,忘記你學習過的關於C++的一切。停止使用'new []'和'delete []'。瞭解RAII,標準庫(尤其是容器和字符串)並閱讀[良好的C++書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 – rightfold

回答

0

的原因終止的第一線,應該是

#include <iostream> 

(注:沒有.h)。舊標頭iostream.h已棄用(實際上它從未正式成爲C++的一部分)。

然後彈出一些更多的錯誤,如使用char*而不是const char*,詢問您何時需要幫助來解決它們。

+1

感謝兄弟您的回覆 但我有findout原因是 這一行 int size = sizeof(obj.name); 我用 代替它int size = strlen(obj.name); – Shujaat

+0

真正的問題即將出現。 :) – Arpit

+0

@Arpit是的,但至少編譯器現在會生成更大的錯誤消息。雖然較大並不一定意味着更有幫助,但;) –