0

我有父类“Entry”,它有两个孩子,收入和费用。我希望能够有一个像这样工作的函数:

bool SomeObject::removeEntry(Entry& item, list<Entry> *l)
{
    if (l==&incomeHis)
        return removeIncome(item);
    if (l==&expHis)
        return removeExp(item);
}

是否可以?函数removeExp()需要类的对象Expense。由于我通过引用传递它,我知道它应该没问题,但编译器不同意。

4

1 回答 1

1

编译器是正确的,因为它不能确保该Entry行中的每个都恰好是Expense.

可以这么说,你已经把自己设计成了一个角落

更好的设计是SomeObject::removeEntry直接执行removeIncome和共有的任何逻辑removeExp。在逻辑不同的地方,调用一个虚函数on item,这两种类型可能不同。

于 2013-04-03T13:54:04.393 回答