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元素的存在来使其更加健壮。