我尝试调用一个方法,但它在尝试访问AbstractIpCalculator的QMap成员变量时崩溃。
我这样打电话:
AbstractIpCalculator *calculator = item_group.at(i).getCalculator();
calculator->setId(1, net_ids[1]);
ABSTRACTIPCALCULATOR_H:
#ifndef ABSTRACTIPCALCULATOR_H
#define ABSTRACTIPCALCULATOR_H
#include <QString>
#include <QDebug>
#include <QPair>
#include <QQueue>
class AbstractIpCalculator
{
public:
AbstractIpCalculator();
...
bool setId(int index, double value);
virtual QString calculate(QString) = 0;
protected:
QMap<int, double> park_netz_list;
...
private:
virtual QString calculateOctetOne(QString) = 0;
virtual QString calculateOctetTwo(QString) = 0;
virtual QString calculateOctetThree(QString) = 0;
virtual QString calculateOctetFour(QString) = 0;
};
#endif // ABSTRACTIPCALCULATOR_H
方法setParkNetzId:
bool AbstractIpCalculator::setId(int index, double value)
{
if(index >= 1)
{
qDebug() << index << value << " " << (&park_netz_list == nullptr);
park_netz_list.insert(index, value); // <--- crash!!!
return true;
}
return false;
}
有许多子类可以扩展AbstractIpCalculator。 *计算器是派生类,但此时我不知道哪个。
我的调试器说:读取访问冲突位于:0x0,标志= 0x0(第一次机会)并在qmap.h第73行停止。
我正在使用Qt 5.0.2。
提前谢谢!
编辑:
setCalculator或getCalculator方法可能有问题吗?
AbstractIpCalculator *CalculatorItemGroup::getCalculator() const
{
return calculator_item;
}
void CalculatorItemGroup::setCalculator(AbstractIpCalculator &calculator_item)
{
this->calculator_item = &calculator_item;
}
初始化:
CalculatorItemGroup item;
item..setCalculator(c);