2013-10-06 143 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是的,但至少编译器现在会生成更大的错误消息。虽然较大并不一定意味着更有帮助,但;) –