首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过引用传递[C++],[Qt]

问通过引用传递[C++],[Qt]
EN

Stack Overflow用户
提问于 2010-01-12 19:55:01
回答 3查看 4.3K关注 0票数 4

我写了这样的东西:

代码语言:javascript
复制
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时:

代码语言:javascript
复制
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_;
};  

我收到错误消息:

代码语言:javascript
复制
error: no matching function for call to 'Storage::add_item(QString, int)
note: candidates are: void Storage::add_item(QString&, int)

我应该如何通过ref发送QString。那我现在怎么做呢?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-12 19:58:37

add_item应该接受"const QString&“而不是"QString&”作为参数。

票数 10
EN

Stack Overflow用户

发布于 2010-01-12 20:02:52

此行返回一个QString by 值

代码语言:javascript
复制
ui->lineEdit->text(),ui->spinBox->value()

因此,您不能将其用作可修改的引用。但是,通过将函数add_item修改为带const QString&参数,可以将其用作不可修改的(常量)引用。

代码语言:javascript
复制
void Storage::add_item(const QString& key,int value)
{
   *my_map_[key] = value;
}

此外,根据QString的实现,仅通过值传递可能同样有效:

代码语言:javascript
复制
void Storage::add_item(QString key,int value)
{
   *my_map_[key] = value;
}

..。但是请注意,通常在类中,尽可能使用常量引用会更有效。

票数 2
EN

Stack Overflow用户

发布于 2010-01-12 20:01:00

问题是ui->lineEdit->text()似乎返回的是QString而不是QString&。

您不能通过引用将它传递给add_item函数,因为它在任何地方都不存在,它只是该函数返回的临时副本。如果你在堆栈上声明它,然后像下面这样传递它,它应该可以工作:

代码语言:javascript
复制
QString qs = ui->lineEdit->text();
strg_->add_item(qs,ui->spinBox->value());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2048664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档