2011-05-05 94 views
0

我有問題。QVector不追加!

出於某種原因,儘管我在爲QString有一個值,做追加()到QVector不工作,我最終仍然只是一個空載體。

QList<QVariant> listServers = mapRepos.values ("servers"); // Finally, the last data structure, for holding server lists. 
    // Populate the repository information with the server lists. 

    for (int i = 0; i < listServers.size(); ++i) { 
     for (int j = 0; j < listServers.at (i).toList().size(); ++j) { 
     std::cout << "On file: " << listServers.at (i).toList().at (j).toString().toStdString() << std::endl; 
     std::cout << "Type #: " << listServers.at (i).toList().at (j).type() << std::endl; 
     buffer3 = listServers.at (i).toList().at (j).toString(); 
     std::cout << "In buffer: (" << buffer3.toStdString() << ")" << std::endl; 
     arrayRepos.value (j).urls.append (buffer3); 
     std::cout << "In memory: " << arrayRepos.value (i).urls.value (i).toStdString() << std::endl; 
     } 
    } 
    } 

這是源文件中的相關代碼片段。第一COUT返回一個URL,所述第二URL返回10(其根據單證指的QVariant包含字符串,這是正確的,第三個COUT正確輸出的字符串。然後,最後一個不輸出字符串。注意的存在所有我的編程常識告訴我,矢量現在應該填充,但在其大小窺視顯示大小爲0,這意味着QString沒有放入。

該Urls QVector是部分的結構:。

結構回購{
QString的名稱; //名稱資源庫的
QVector <QString>的網址,服務器或鏡像列表中的地址//
};

QString名稱是早期代碼的一部分,可以正常工作,並且與此問題無關。

我想不出爲什麼append()或push_back()不起作用。

+2

只是一個愚蠢的doubt..For'append'您使用指數作爲'j'和'cout'你正在使用'i'。這是打算嗎? – Naveen 2011-05-05 04:47:07

回答

2

什麼是arrayRepos類型,我想這是某種形式的Qt容器(QVector,QList,使用等)。在這種情況下arrayRepos.value (j)返回repo結構的副本,當你需要一個參考,所以你需要爲使用operator[]at(j)成員函數。

+0

這樣做的行: arrayRepos [i] .urls.append(buffer3); – 2011-05-05 16:49:39

0

你可以將這個arrayRepos.value (j).urls.append (buffer3);代碼分解爲單個語句,然後嘗試。

像:

QVector<QString> tmpurls = arrayRepos.value (j).urls; 
tmpurls.append (buffer3);