Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-重载对象指针列表的[]运算符_C++_List_Pointers_Visual C++ - Fatal编程技术网

C++ C++;-重载对象指针列表的[]运算符

C++ C++;-重载对象指针列表的[]运算符,c++,list,pointers,visual-c++,C++,List,Pointers,Visual C++,我把它作为班级任务的一员 list<Stimulation*> listOfStimulations; 刺激列表; 以及我班上其他同学的定义 class Task { public: Task(); Task(const Task& obj); Task(const Task&& obj); Task(string, list<Stimulation*>); Task& operator+=( S

我把它作为班级任务的一员

list<Stimulation*> listOfStimulations;
刺激列表;
以及我班上其他同学的定义

class Task
{
public:
    Task();
    Task(const Task& obj);
    Task(const Task&& obj);
    Task(string, list<Stimulation*>);
    Task& operator+=( Stimulation* obj);
    Stimulation* Task::operator[](int i) const;
};
#endif
类任务
{
公众:
任务();
任务(const任务和obj);
任务(常量任务和对象);
任务(字符串、列表);
任务和操作员+=(刺激*obj);
刺激*任务::运算符[](int i)常量;
};
#恩迪夫
我想成为ale,访问列表中的每个刺激

我知道我应该使用vector,但使用list是必需的

我将如何过载[]

我试过了

    Stimulation* Task::operator[](int i) const
{
    list<Stimulation*>::const_iterator iter;
    iter = listOfStimulations.begin();
    advance(iter, i);
    return *iter;
}
刺激*任务::运算符[](int i)常量 { 列表::常量迭代器iter; iter=listofSimulations.begin(); 国际热核实验堆(iter,i); 返回*iter; } 我的主要问题是,这段代码不允许我访问列表中的元素


例如,ListofSimulations[i]不起作用,并且不允许我访问Simulations类中的函数显示

鉴于列表中每个元素的索引/位置,您尚未指定是否需要对其进行随机访问

无论如何,正如molbdnilo所评论的,std::list没有运算符[], 有关原因的说明,请阅读

要访问列表中的项,最好使用迭代器,从开始

已编辑
好的,根据您自己的评论,您需要随机访问每个索引项。
您在该注释中链接的代码看起来是个不错的选择。

顺序访问
列表的最佳方法是使用其

我建议使用符合需求的数据结构,而不是仅仅因为需要而尝试使用列表

迭代器就是这样工作的

for (std::list<T>::iterator it = mylist.begin(); it != mylist.end(); ++it)
{
   if (...)
   {
      return *it;
   }
}

只需使用
begin()
end()
?您可以使用迭代器遍历列表,直到到达第n个节点。如果它是标准的
列表
,则不能<代码>运算符[]
必须是非静态成员函数。
std::list
的要求表明此练习想教您如何在不依赖索引的情况下编程。@molbdnilo很抱歉,此练习确实指定要重载[]运算符。@felix我已经尝试过了,我不完全确定它是否符合我的要求。我希望能够执行listofsimulation[I]->display()来调用对象的display函数。您好,本质上我希望获取我的列表并访问方括号内的每个元素。我知道原因,我应该使用向量。不幸的是,这是一项要求。我试过了,但它没有达到我想要的效果。ListofSimulations[i]->display()唯一的问题是,我似乎无法使用列表访问其中的每个对象指针,这让我相信我的声明做了一些错误。如果没有完整但基本的源代码,很难理解您真正在做什么以及需要什么来帮助您。我建议您编辑您的问题,并在其中添加最少的源代码(内联,而不是StackOverflow之外的链接页面)。在您链接的代码中,您正在重载名为Task(not)的类的运算符[]。该类在代码片段的任何地方都没有定义。事实上,请查看问题是,这会重载我列表的[]还是仅重载我的实际对象。好的,我已经更新了我的代码(请参阅main post)。我仍然无法访问每个刺激的显示功能。请尝试使用std::advance(it,5);std::advance(it,5);的结果与mylist[5]的结果相同。没错,但它仍然不允许我访问列表中对象的成员。(例如,列表中的每个对象都有显示功能).我需要在
for
循环中调用无条件
return
std::list<T>::iterator it = mylist.begin();
std::advance(it,5);
return *it