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