C++ 在C++;

C++ 在C++;,c++,list,struct,stl,iterator,C++,List,Struct,Stl,Iterator,我正试图用迭代器打印出由结构组成的列表,但我无法这样做,因为迭代器无法指向我的士兵。index(),我可以知道我做错了什么吗 我越来越 [错误]“std::list::iterator”没有名为“index”的成员 #包括 #包括 #包括 使用名称空间std; 结构兵 { 整数指数; bool-isAlive=true; }; int main() { 上市公司; 列表::迭代器; int N; 报告的整数; cin>>N; 对于(int i=0;i>报告的数量; while(报告的数量--)

我正试图用迭代器打印出由结构组成的列表,但我无法这样做,因为迭代器无法指向我的士兵。index(),我可以知道我做错了什么吗

我越来越

[错误]“std::list::iterator”没有名为“index”的成员

#包括
#包括
#包括
使用名称空间std;
结构兵
{
整数指数;
bool-isAlive=true;
};
int main()
{
上市公司;
列表::迭代器;
int N;
报告的整数;
cin>>N;
对于(int i=0;i>报告的数量;
while(报告的数量--)
{
for(it=company.begin();it!=company.end();it++)
{

cout它应该是
It->index
而不是
It.index()

最简洁的方法是:

用于(汽车与s:公司)
{

我想你应该这样做:

for (list<Soldier>::iterator it = company.begin(); it != company.end(); ++it)
{
    cout << it->index << endl;
}
for(list::iterator it=company.begin();it!=company.end();++it)
{

cout index这实际上是一个很难回答的问题。我不知道你们班的课程,但我可以看出标准图书馆的介绍有很多细微差别

迭代器是一个完全成熟的对象。它真的不知道关于士兵结构的任何信息。它知道如何使用包含士兵的std::list。它充满了重载运算符。在这一点上,我可以看到哪里的水变得泥泞。所以你还没有学会运算符重载,但你打算使用它?我们希望您将迭代器视为一个黑匣子,因此您必须盲目地遵循某些规则。如果是这种情况,您应该被告知迭代器可以访问容器中的对象,并且访问该对象的唯一方法是使用magic
it->thing

如果您已经了解了重载,那么应该指出->是迭代器重载。运算符返回指向对象的指针。或者,至少,您可以将迭代器视为原始指针,它看起来是一样的。您已经了解了指针吗

而且,正如上面提到的那样

for( auto& item : container )...;
是一种语言结构。它的作用与:

for (it = company.begin(); it != company.end(); it++)
{
    auto& item= *it;
    std::cout << item.index << std::endl;
}

老实说,看起来你跳过了几个类或者没有注意到。我建议你仔细阅读你的教科书和它关于迭代器的章节。或者。Index不是一个方法。所以应该是它->Index
for( auto& item : container )...;
for (it = company.begin(); it != company.end(); it++)
{
    auto& item= *it;
    std::cout << item.index << std::endl;
}
using namespace std;