当我尝试编译代码时,出现了以下错误:
我读到如果在类中设置相等,则需要定义自己的运算符,如果有
non-static reference member 'Timestep& Timestep::previousTimestep',can't use default assignment operator
我创建了一个Problem
,它创建了一个Timestep
,并将其引用存储在向量solution
中。此外,我想要存储对先前Timestep
的引用 - 对于第一个Timestep,这将是对自身的引用...我读到如果在类中设置相等,则需要定义自己的运算符,如果有
const
成员,则需要这样做。然而,我已经从代码中删除了所有const
元素,但仍然无法工作。有什么建议吗?非常感谢。class Problem {
public:
void initialTimestep(arma::vec ic);
private:
std::vector<Timestep> solution;
};
void Problem::initialTimestep(vec ic){
Timestep myFirstTimestep(starttime, ic, nodes);
solution.push_back(myFirstTimestep);
}
class Timestep {
public:
Timestep(double starttime, arma::vec initialCondition, arma::vec nodelist);
private:
Timestep& previousTimestep; //const
};
Timestep::Timestep(double starttime, vec initialCondition, vec nodelist)
: previousTimestep(*this)
{
//do stuff
}
int main() {
int k = 3; //subdomains
vec v = linspace(0., 1., k+1); //node spacing
vec ic= ones<vec>(k+1); //initialconditions
Problem myProblem(v, ic, 0., 1., 0.1);
return 0;
}
move
的评论很有帮助。最终,我使用了这个solution.emplace_back(starttime, ic, nodes)
来解决我的问题(需要 C++11)。从性能角度来看,这似乎也是首选的方式。此外,它还解决了常量元素的问题。 - dani