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

ベクトルを値で受け取ります。これは、呼び出されると、引数が関数で使用するためにコピーされ、そこで値を変更しても、関数呼び出しの外側のインスタンスには反映されないことを意味します(変更はcopyで行われたため)。

参照によってベクトルを渡したいので、コピーされず、関数呼び出しの外部にあるオブジェクトに対して変更が行われます。これは&、署名を追加することによって行われます。

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

const referenceで渡すこともできることに注意してください。これは、効率上の理由からよく行われます。つまり、参照のみが関数に渡されますが、関数本体内でインスタンスを変更することは許可されていません。

于 2014-01-16T00:38:56.593 に答える