擦除向量中的对象时出错。如何将移动赋值运算符添加到我的 类?

error when erasing object in vector. how do i add move assignment operators to my classes?

当我试图从矢量中删除一个对象时出现错误

用谷歌搜索,但我不明白哪里出了问题。根据我收集到的信息,我正确地调用了擦除函数,但我必须为我的 classes?

提供一个移动赋值运算符

我调用擦除的函数

void removegroup(const short &group){
switch (tracker[group].group){
    case 0: {
        guardvec.erase(guardvec.begin()+tracker[group].position); //this is the problem it compiles just fine if i comment out this line
        //guardvec.erase(remove(guardvec.begin(), guardvec.end(), tracker[group].position),guardvec.end()); //tried this and it doesnt work
    }

        break;
}
for (short counter=0;counter<tracker.size();counter++)
    if ((tracker[counter].group==tracker[group].group)&&(tracker[counter].position>tracker[group].position))
        tracker[counter].position=tracker[counter].position--;
}

我的class

class guardhitdice {
    friend class guard;
    short const times = 2, dice = 8, plus = 2;
};

class guard : private guardhitdice {
private:
    short units, XP, morale, totalHP=0, dead=0, wounded=0;
    short* HP = new short[units];
public:
    void showstats(){
        std::cout << "STR=1, DEX=1, CON=1, INT=0, WIS=0, CHA=0, Perception=2, Passive Perception=12"<<std::endl
        <<"current xp: "<<XP<<"total HP across units: "<<totalHP<<"casualties: "<<dead<<"wounded: "<<wounded;
    }
    void initializeHP(){
        for (short counter=0; counter<units-1; counter++){
            HP[counter]=plus + D(times, dice);
            totalHP+=HP[counter];
        }
    }
   guard(const short &xp, short &Units, short &Morale){
       XP=xp;
       units=Units;
       morale=Morale;
      // short* HP = new short[units];
       initializeHP();
   }
    ~guard(){
        delete HP;
    }

};

这是我的编译器错误 https://pastebin.com/KSniFkVD 它应该能够移除位于 tracker[group].position 的对象。顺便说一句,位置是空头 我也尝试将此添加到我的 classes,但它们不起作用

guardhitdice& guardhitdice ::operator=(guardhitdice&&);
  guard& guard ::operator=(guard&&);

如果我对法线向量而不是对象向量这样做就有效

你的问题可以减少到

#include <vector>

class test{
    short const times = 2;
};

int main()
{
    std::vector<test> t;
    t.push_back(test{});
    t.erase(t.begin()); //<-- BAM!
}

示例:https://ideone.com/MlwUyI

vector 做了很多复制和分配。复制很酷,但测试包含一个 const 成员。您无法更改 const 变量,因此无法分配它。

但是由于它是用文字初始化的,并且没有允许将值初始化为其他值的构造函数,因此 test 的所有实例都将具有相同的值。这非常适合 staticstatic 变量不参与赋值,所以可以使用默认的赋值运算符。

class test{
    static short const times = 2;
};

示例:https://ideone.com/npUi4B