2014-01-16 71 views
1

所以我想創建一個簡單的程序,允許我使用隨機函數來操縱矢量,但我覺得我忘記了一些相當重要的東西&基本的 請隨時看看代碼I已發佈&讓我知道解決方案是什麼。我收到的錯誤是myvec會是「索引超出範圍只意味着推回並沒有在我創建的插入方法的工作。不知道爲什麼,我還是個新手。編輯一個QVector

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

請注意,您還可以通過const引用,這往往是出於效率的考慮做通。這意味着只有一個引用被傳遞給函數,但不允許修改函數體內的實例。