我有一个类命令,它的实例存储在QMap / Map中,并且有一个Key:int,value:order pattern。一切顺利,直到我开始遍历地图并访问类的功能。首先,我尝试使用它的getter方法打印出订单对象值 例如:
orderSet.value(i).getDate().toString("dd/MM/yyyy");
//OrderSet is my map
然而这产生了错误
error: passing 'const order' as 'this' argument of 'QDate order::getDate()' discards qualifiers [-fpermissive]
然后我通过向getter方法添加'const'来修复此问题,并且前一行代码将成功运行并打印出对象日期为字符串。
然而现在问题是我无法实现我的setter方法,因为我会得到相同的错误,显然setter方法有一行改变原始成员变量,所以这本身就违反了常量规则,所以我怎么能改变地图中的对象变量??
如果有帮助的话,继承我的代码:
class order
{
QDate dateOrdered;
int totOrders;
double totValue;
public:
order();
order(QDate,int,double);
//Sets
void setDate(QDate); //Cant add const since values are being altered
void setOrderTot(int);
void setValueTot(double);
//Gets
QDate getDate() const; //Adding const solved these methods
int getOrderTot()const;
double getValueTot()const;
};
#endif // ORDER_H
答案 0 :(得分:1)
QMap::value()返回const T
,因此您无法在其上调用非const成员函数。此外,它返回地图中对象的副本,因此调用setter不会按照您的想法执行,并且地图中的对象将保持不变。返回引用的唯一成员函数是operator[]
,但请记住,您首先需要检查地图是否包含contains()
的密钥,因为operator[]
会将其添加到地图中
或者,您可以使用迭代器来访问项目并进行修改。
QMap<int, order>::iterator it = orderSet.find(i);
if (it != orderSet.end()) {
// Found it
it->callSetter();
}