class OSwitch {
private:
    Operator *operators[];
    //int variable; <-- unused variable

public:
    OSwitch() {}
    ~OSwitch() {}

void setOperator(int id, Operator *op) {
    operators[id] = op;
}

void execute(int id) {
    operators[id]->execute();
}

};

抽象基类运算符有几个子类。
当多次调用setOperator()时,数组将“忘记”最后一个元素。

例如
XOperator a;
YOperator b;
os.setOperator(1,a);
os.setOperator(2,b);
os.execute(1); // <- wont work

但是,当声明了int变量(或OperatorSwitch中的任何其他变量)时,它就起作用了。
我不知道这是如何工作的。

感谢您的任何提示。

最佳答案

您的成员变量operators是一个无大小的数组,它是不完整的类型,并且在类定义中是不允许的。

您可能想要的是整数到指针的映射:

#include <map>

class OSwitch
{
private:
    std::map<int, Operator *> operators;
public:
    void setOperator(int id, Operator *op) { operators[id] = op; }
    void execute(int id) { operators[id]->execute(); }
};

请注意,在尚未分配有效指针的ID上调用execute将是错误的。您可以通过首先检查map元素的存在来使其更加健壮。

10-08 08:14
查看更多