Редактирование QVector с помощью

Поэтому я пытаюсь создать простую программу, которая позволяет мне манипулировать вектором с помощью случайной функции, но я чувствую, что забыл что-то довольно важное & фундаментальный
пожалуйста, не стесняйтесь смотреть на код, который я разместил & дайте мне знать, что решение. Ошибка, которую я получаю, заключается в том, что myvec — это «индекс вне диапазона», что означает только то, что pushback не работает в созданном мной методе вставки. Не знаю, почему, я все еще новичок.

#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));
}

1

Решение

Ваша функция

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

берет вектор по значению. Это означает, что когда он вызывается, аргумент скопированный для использования в функции, и когда вы изменяете значение там, оно не отражается на экземпляре вне вызова функции (потому что изменение было сделано на копия).

Вы хотите передать вектор по ссылке так что это не копируется, и изменения сделаны на объекте, который все еще живет вне вызов функции. Это делается путем добавления & в подписи:

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

Обратите внимание, что вы также можете пройти по ссылке, что часто делается из соображений эффективности. Это означает, что в функцию передается только ссылка, но нельзя изменять экземпляр в теле функции.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]