我试图在列表中创建一个列表,现在我在尝试访问数据包列表中的数据包元素时遇到了麻烦,而这些元素又包含在列表中。 (数据包是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;
}
}
}
谢谢!
数据包类
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);
};
答案 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