使用c ++中的类实例在类中填充成员向量的标准方法

时间:2015-03-22 18:37:59

标签: c++ vector

给定两个类,例如EquationTerm,其中Equation的成员向量类型为Term

Term.h

class Term
{
    public:
          Term();
          Term(string inputTerm);
    private:
          string termValue;
}

Term.cpp

#include "Term.h"

Term::Term()
{
    //default ctr
}


Term::Term(string inputTerm)
{
    termValue = inputTerm;
}

Equation.h

#include 'Term.h'

class Equation
{
    public:
           Equation(string inputEQ)

    private:
           vector<string> termStrings;  //The input for the constructors of a Term
           vector<Term> theTerms; // The vector I wish to populate

}

Equation.cpp

#include "Equation.h"    

Equation::Equation(string inputEQ)
{
    while(parsing inputEQ for individual terms)
    {
        //This is where the vector of strings is populated
    }

    for(int i = 0; i < termStrings; i++)
    {
        //Loop the same number of times as number of terms
        //This is where I wish to "push_back" an instance
        //of a term with the according termString value to 
        //my vector "theTerms" however I recieve an error 
        //when I attempt this.

        //updated:
        Term * aTerm = new Term( termString[i] );
        theTerms.push_back( aTerm );

    }

}

在loopable方法中填充术语向量的最合理方法是什么?

1 个答案:

答案 0 :(得分:1)

我怀疑问题是你的向量包含具体对象,Term没有复制或移动构造函数。解决方案有两种选择:

  1. 请改用vector<shared_ptr<Term>>。这将存储指向Term个对象的指针,并允许您直接操作向量中的项目。
  2. 将复制构造函数Term::Term(Term&)添加到Term课程。这样就可以将项目复制到载体中或从载体中复制出来。
  3. 哪种方法适合您的方案取决于您使用Term对象的方式。如果你需要传递实例,那么第一种方法就是你想要的方法。如果你想确保列表中的项目是不变的,那么你需要处理副本,那么第二种方法是正确的。