在C ++中访问列表中的列表

时间:2019-10-15 19:17:20

标签: c++

我试图在列表中创建一个列表,现在我在尝试访问数据包列表中的数据包元素时遇到了麻烦,而这些元素又包含在列表中。 (数据包是btw类)

list> poemContainer; (更大的列表) 列出数据包列表; (包含在较大的列表中)

我想要做类似 poemContainer-> packetList-> elementOfListContained 的操作(访问第一个数据包,然后从数据包类中获取所需的数据)

试图做下面的事情,但是编译器说列表中没有成员it2

for (list<list<packet>>::iterator it = poemContainer.begin(); it != poemContainer.end(); ++it) {
        for(list<packet>::iterator it2 = packetList.begin(); it2 != packetList.end(); ++it2) {
                if (!(strcmp(it.it2.sourceAddress, packetDetails->sourceAddress))) {// unnecessary loop just
                    it2.push_back(packetDetails); //compare directly to the begin
                    break;
                }
                else {
                    list<packet> newPoemFound;
                    newPoemFound.push_back(packetDetails);
                    poemContainer.push_back(newPoemFound);
                    break;
                }
        }
}

编译器消息 enter image description here

谢谢!

数据包类

class packet{
private:
    string sourceAddress;
    string destinationAddress;
    int sequenceNumber = 0;
    string seqNum; //string of sequenceNumber in case needed for the checksum
    string checkSum;
    string lengthOfData;
    string data;
    string padding;
public:
    void parsing(string);
    string addressToDec(string);
    string dataTranslator(string);
};

1 个答案:

答案 0 :(得分:0)

第一个错误在此行

it.it2.sourceAddress

基本上,迭代器类型(it)没有名为it2的成员。

我猜应该是

it->sourceAddress

此行还有另一个错误:

it2.push_back(packetDetails);

要使其正常工作,您需要先取消对迭代器的引用:

任一

it2->push_back(packetDetails);

(*it2).push_back(packetDetails);

应该工作

话虽这么说,真的很难看到您要做什么。您也可以使用基于范围的for循环来简化很多操作:

for (auto& poem : poemContainer) {
        for(auto& packet : packetList) {
                //bla bla bla