给定两个类,例如Equation
和Term
,其中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方法中填充术语向量的最合理方法是什么?
答案 0 :(得分:1)
我怀疑问题是你的向量包含具体对象,Term
没有复制或移动构造函数。解决方案有两种选择:
vector<shared_ptr<Term>>
。这将存储指向Term
个对象的指针,并允许您直接操作向量中的项目。Term::Term(Term&)
添加到Term
课程。这样就可以将项目复制到载体中或从载体中复制出来。哪种方法适合您的方案取决于您使用Term
对象的方式。如果你需要传递实例,那么第一种方法就是你想要的方法。如果你想确保列表中的项目是不变的,那么你需要处理副本,那么第二种方法是正确的。