我写了这样的东西:
class Storage
{
public:
Storage();
QString key() const;
int value() const;
void add_item(QString&,int);
private:
QMap<QString,int>* my_map_;
};
void Storage::add_item(QString& key,int value)//------HERE IS THE SLOT FOR ADDING
{
*my_map_[key] = value;
}当我尝试通过以下方式将项目添加到QMap时:
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget* = 0);
public slots:
void add_item()
{
strg_->add_item(ui->lineEdit->text(),ui->spinBox->value());//---HERE I'M "PASSING" TWO OBJECTS: QString AND int
ui->lineEdit->clear();
}
private:
Ui::Dialog* ui;
Storage* strg_;
}; 我收到错误消息:
error: no matching function for call to 'Storage::add_item(QString, int)
note: candidates are: void Storage::add_item(QString&, int)我应该如何通过ref发送QString。那我现在怎么做呢?谢谢。
发布于 2010-01-12 19:58:37
add_item应该接受"const QString&“而不是"QString&”作为参数。
发布于 2010-01-12 20:02:52
此行返回一个QString by 值
ui->lineEdit->text(),ui->spinBox->value()因此,您不能将其用作可修改的引用。但是,通过将函数add_item修改为带const QString&参数,可以将其用作不可修改的(常量)引用。
void Storage::add_item(const QString& key,int value)
{
*my_map_[key] = value;
}此外,根据QString的实现,仅通过值传递可能同样有效:
void Storage::add_item(QString key,int value)
{
*my_map_[key] = value;
}..。但是请注意,通常在类中,尽可能使用常量引用会更有效。
发布于 2010-01-12 20:01:00
问题是ui->lineEdit->text()似乎返回的是QString而不是QString&。
您不能通过引用将它传递给add_item函数,因为它在任何地方都不存在,它只是该函数返回的临时副本。如果你在堆栈上声明它,然后像下面这样传递它,它应该可以工作:
QString qs = ui->lineEdit->text();
strg_->add_item(qs,ui->spinBox->value());https://stackoverflow.com/questions/2048664
复制相似问题