所以我试图创建一个简单的程序,允许我使用随机函数操作向量,但我觉得我忘了一些相当重要的东西&基本的 请随时查看我发布的代码&让我知道解决方案是什么。我收到的错误是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));
}
答案 0 :(得分:1)
你的功能
void MainWindow::insert(QVector<QString> vec){
vec.push_back("Hello World");
}
通过值获取向量。这意味着当它被调用时,参数是复制以便在函数中使用,当你在那里修改它时,它不会反映在函数调用的外部上(因为修改是在副本上完成的。)
您希望通过引用传递 ,因此不会复制它,并且对仍在外部函数调用的对象进行修改。这是通过在签名中添加&
来完成的:
void MainWindow::insert(QVector<QString> & vec){
vec.push_back("Hello World");
}
请注意,您也可以通过const引用传递,这通常是出于效率原因。这意味着只有一个引用被传递给函数,但是不允许在函数体内修改实例。