2015-11-10 84 views
0

我得到了一个练习表单,我的老师(main()函数),应该编写函数和类,以便它能够工作。但我有seg故障,不知道该怎么办。我会很感激任何建议。C++,classes,Segmentation fault,遍布整个程序

#include <iostream> 
class TSeries{ 
    public: 
     TSeries() 
      { 
       _size = 0; 
       _capacity = 0; 
       _tab = NULL; 
      } 


     TSeries(float *tab, const int size) 
     { 
       _tab = new float[size]; 
       for(int i =0;i<size;i++) _tab[i] = tab[i]; 
       _size = size; 
     } 

     ~TSeries(){delete [] _tab;} 

     TSeries & operator+=(float value){return insert(value);} 
     TSeries & operator,(float value){return insert(value);} 
     TSeries & operator+(const TSeries & s) 
     { 
      // if(this->_size != s._size) std::cout<<"Size doesn't match!"<<std::endl; 
      /*else 
      { 
       std::cout<<"whee"; 
       for(int i; i<this->_size;i++) 
       { 
        //this->_tab[i] += s._tab[i]; 
        std::cout<<"nothing"; 
       } 
      return *this; 
      }*/ 
     std::cout<<"sth"; 
     } 

     TSeries & operator()(int position1, int position2){} 
     TSeries & insert(float k) 
      { 
       if(_size >= _capacity) Enlarge();     
       _tab[_size++] = k; 
       return *this; 
      } 
     friend std::ostream & operator<<(std::ostream & out, const TSeries & s); 


    private: 
     int _size, _capacity; 
     float *_tab, *_itr; 
     static int _nr; 

      void Enlarge() 
      { 
       _capacity = 2 * _capacity + 1; 
       float *tmp = new float[_capacity]; 

       for(int i=0;i<_size;++i) 
       { 
        tmp[i] = _tab[i]; 
       } 
       delete [] _tab; 
       _tab = tmp; 
      } 
}; 

std::ostream & operator<<(std::ostream & out, const TSeries & s) 
{ 
    int przedostatni = s._size - 1; 
    out<<"("; 
    for(int i =0;i<s._size;i++) 
    { 
     out<<(int)s._tab[i]; 
     if(i != przedostatni) 
      out<<","; 
    } 
    out<<")"<<std::endl; 
} 

using namespace std; 
int main(int argc, char **argv) { 
    TSeries series1; 
    series1 += 1.,2.,4.,2.; 
    cout<<"Series1: "<<series1<<endl; 

    const int size=7; 
    float tab[size] = {3.,3.,3.,4.,5.,1.,0.}; 
    const TSeries series2(tab,size); 
    cout<<"Series2: "<<series2<<endl<<endl; 


    TSeries series3 = series1+series2; 
    cout<<"Series3: "<<series3<<endl<<endl; 

    series1+=1.,0.,3.; 
    series3=series1+series2; 
    cout<<"   "<<series1<<endl; 
    cout<<"   +"<<series2<<endl; 
    cout<<"  ---------------------"<<endl; 
    cout<<"Series3: "<<series3<<endl<<endl; 

    //TSeries series4=series1(2,4); 
    cout<<"Series4: "<<series3<<endl; 

    return 0; 
} 

回答

1

您修复了您的其中一个问题(分配给_tab指针)。

另一个问题应该会引起编译器的警告。

您需要从operator<<方法中返回out

请注意,您也应该使用out参数,而不是在方法中始终使用cout

+0

谢谢你提醒我,我忘记了。我已经修复了它,但是如果我尝试对“+”或“()”操作符做任何事情,seg故障仍然存在,我甚至不能对它们做任何事情。有任何想法吗? – ninigi

+0

您的更新代码显示您现在使用'out'来执行输出,但是您仍然没有从该函数返回它。将'return out'添加到函数的末尾。类似地,你更新的'+'运算符没有返回任何东西,可能在你的'cout'调用被刷新到屏幕之前导致崩溃。如果将函数定义为具有返回类型,则应该返回该类型的值。 –

相关问题