0

我有一个类 orders,它的实例存储在 QMap/Map 中,并且有一个 Key:int, value:order 模式。一切都很顺利,直到我开始遍历地图并访问类的函数。首先,我尝试使用它的 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
4

1 回答 1

1

QMap::value()返回 a const T,因此您不能在其上调用非 const 成员函数。此外,它返回映射中对象的副本,因此调用 setter 不会按照您的想法进行,并且映射中的对象将保持不变。唯一返回引用的成员函数是operator[],但请记住,您首先需要检查映射是否包含带有 的键contains(),因为operator[]会将其添加到映射中。

或者,您可以使用迭代器访问项目并对其进行修改。

QMap<int, order>::iterator it = orderSet.find(i);
if (it != orderSet.end()) {
    // Found it
    it->callSetter();
}
于 2012-09-26T08:52:28.130 回答