1

所以我正在尝试创建一个简单的程序,允许我使用随机函数来操作向量,但我觉得我忘记了一些相当重要和基本的东西,请随时查看我发布的代码并让我知道解决办法是。我收到的错误是 myvec 是“索引超出范围,这仅意味着在我创建的插入方法中推回不起作用。不知道为什么,我还是个新手。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QVector>

QVector<QString> myvec;

void insert(QVector<QString> vec);

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::insert(QVector<QString> vec){
    vec.push_back("Hello World");
}

void MainWindow::on_pushButton_clicked()
{
    insert(myvec);
    ui->label->setText(myvec.at(0));
}
4

1 回答 1

1

你的功能

void MainWindow::insert(QVector<QString> vec){
    vec.push_back("Hello World");
}

按值获取向量。这意味着当它被调用时,参数被复制以在函数中使用,并且当您在那里修改值时,它不会反映在函数调用之外的实例上(因为修改是在副本上完成的)。

您想通过引用传递向量,因此它不会被复制,并且对仍然存在于函数调用之外的对象进行修改。这是通过添加&签名来完成的:

void MainWindow::insert(QVector<QString> & vec){
    vec.push_back("Hello World");
}

请注意,您也可以通过const reference传递,这通常是出于效率原因。这意味着仅将引用传递给函数,但不允许修改函数体内的实例。

于 2014-01-16T00:38:56.593 回答