运营商LT;<重载,endl导致分段错误

时间:2013-09-19 13:40:56

标签: c++ overloading operator-keyword

刚刚将我的程序从windows移到了linux,现在工作的相同代码在调用运算符时给了我一个分段错误&lt;&lt;主要功能。 (概述)我的程序是一个Vector类,它接受输入并返回输入内容,但是当它到达<< endl时它会崩溃,如果我从endl删除它main()它不会崩溃?< / p>

..///main


VecXd<int> x;                                           
        cout << "Input vector a\n"; 

cin >> a;


cout << "Test A: "<< a << endl; //seg fault, -> 
cout << "Test A: " << a; //works

//----- class VecXd\\ opertor<< def + operator>>

  /******************************************************/
   friend istream &operator>>(istream &input, VecXd& vec)
   {

         for(int i = -1; i <= vec.dimension - 1; i++)
         {
           if(i == -1)
           {
           input >> vec.dimension;//>> (V vecArr = new V[vec.dimension]);
           cout << vec.dimension << " dimension check" << endl;
           vec.vecArr = new V[vec.dimension];
                                //vec.dimension = vecArr[0];
                                //cout << vec.dimension << " dimension check" << endl;
           }
           else
           {
           input >> vec.vecArr[i];//>> (V vecArr = new V[vec.dimension]);
           cout << vec.vecArr[i] << " value check" << endl;
           }
         }


   }

   friend ostream& operator<<(ostream& output, const VecXd& vec)
   {
          for(int i = 0; i < vec.dimension; i++)
          {
          output << vec.vecArr[i] << " ";

          }
          output << endl;
         // output << endl;

   }
   /****************************************************/

为什么endl导致崩溃?数组输出endl没有结束这个问题吗?

1 个答案:

答案 0 :(得分:3)

您忘了返回ostream&(和istream&)。

如果使用gcc / clang / icc

,请在编译命令中添加-Wall标志