我很困惑,因为我无法弄清楚我的错误/问题在哪里。我有一个类指令,它使用两个自定义运算符,一个赋值和一个比较运算符。以前我只使用比较运算符,以便使用 std::sort 根据指令的成员之一(即 std::string 名称)对指令进行排序。但是,自从我开始重构整个项目后,我将一些成员更改为常量。这导致我不得不为这些常量使用初始化列表。这反过来又导致我不得不创建一个赋值运算符,因为这些指令在向量中推回时会被复制。这就是一切出错的地方。我包括我的类声明和构造函数和运算符。
指令.hpp
class Instruction
{
private:
unsigned int param_size;
const float max_angle, min_angle;
bool micro_mutated;
protected:
const std::string body_part;
std::vector<Parameter <float> > parameters;
public:
Instruction(std::string name, float max, float min);
Instruction operator=(const Instruction& I);
bool operator<(const Instruction& I) const;
//there are a few more functions but are completely irrelevant
}
指令.cpp:
Instruction::Instruction(std::string name,float max, float min) :
body_part (name), max_angle(max), min_angle(min)
{}
Instruction Instruction::operator=(const Instruction& I)
{
(*this) = I;
return (*this);
}
bool Instruction::operator<(const Instruction& I) const
{
return body_part < I.body_part;
}
我创建赋值运算符(老实说我以前从未做过)的唯一原因是因为当我尝试 push_back 指令时,编译器抱怨无法实例化“从这里”指令,我认为它必须与常量成员一起做。没有成员是不变的,一切都很好,即使是排序。现在奇怪的部分。如果我删除 std::sort,上面的代码可以工作,但不是一直有效。有时它会在一段时间后崩溃,有时它不会崩溃。但是在我包括排序的那一刻,它会立即崩溃。有人可以帮忙吗?