能够编译和运行。但是,当运行代码时,它无法打印我想要打印的任何值

时间:2015-09-19 04:52:22

标签: c++ templates compilation

#include <typeinfo>
#include <iostream>
#include <math.h>

template <typename T>
class Polynomial
{
private:
    Polynomial *termArray;
    //int capacity;
    //int terms;
    T coef,exp;
public:
    Polynomial()
    {   
            termArray = new Polynomial[3];
    };  
    ~Polynomial();
    void Print();
    void CreateTerm(const T coef, const int exp);
};

template <typename T>
Polynomial<T>::~Polynomial()
{
    delete []termArray;
}

template <typename T>
void Polynomial<T>::Print()
{
    for(int i=0;i<3;i++)
    std::cout << termArray[i].coef << " " << termArray[i].exp << std::endl; 
}

template <typename T>
void Polynomial<T>::CreateTerm(const T coef,const int exp)
{
    for(int i=0;i<3;i++)
    {   
            termArray[i].coef = coef;
            termArray[i].exp = exp;
    }   
}

int main()
{
    Polynomial<double> f,g;

    f.CreateTerm(-4.8,3);
    f.CreateTerm(2.9,2);
    f.CreateTerm(-3,0);
    std::cout << "f = ";
    f.Print();

    g.CreateTerm(4.3,4);
    g.CreateTerm(-8.1,0);
    g.CreateTerm(2.2,3);

    std::cout << "g = ";
    g.Print();

return 0;
}

如上所述,可以编译和运行此代码。然而,当运行代码时,它无法打印任何我想要打印出来的值并进入长时间睡眠状态。(虽然我输入的内容并不会影响我的打字)

如何修改打印代码..请帮助我。

1 个答案:

答案 0 :(得分:2)

这是你的构造函数:

Polynomial()
{   
        termArray = new Polynomial[3];
};

当您创建新的多项式时,您的代码会在构造函数中创建3个新闻多项式。对于这3个多项式中的每一个,您将再创建3个多项式!此时共有13个多项式对象。再次为新的添加3。这将继续,直到你的内存不足。更具体地说,当你的堆栈空间不足时,因为这些都是在那里分配的。

您的代码永远不会越过这一行,因为它会调用构造函数recursively

termArray = new Polynomial[3];

还需要考虑其他一些事项:

  • 考虑添加另一个班级Coefficient
  • 而不是Polynomial对象(quite literally your stack overflow bug)中的Polynomial个对象数组,而是Coefficient个对象中的Polynomial个对象数组
  • 多项式可以具有多于或少于3个系数/指数。
  • 如果您使用的是std::vector而不是数组,则只需在班级create_term()内调用向量的push_back()方法即可添加新系数