我有一个指令类型列表。指导是我做的一门课。此类具有一个称为execute()的函数。
我创建了指令列表*
list<Instruction*> instList;
我创建了一条指令*
Instruction* instPtr;
instPtr = new Instruction("test",10);
如果我打电话
instPtr.execute();
该函数将正确执行,但是,如果将instPtr存储在instList中,则无法再从列表中调用execute()函数。
//add to list
instList.push_back(instPtr);
//create iterator for list
list<Instruction*>::iterator p = instList.begin();
//now p should be the first element in the list
//if I try to call execute() function it will not work
p -> execute();
我收到以下错误:
error: request for member ‘execute’ in ‘* p.std::_List_iterator<_Tp>::operator-> [with _Tp = Instruction*]()’, which is of non-class type ‘Instruction*’
最佳答案
p
是Instruction *
指针的迭代器。您可以将其视为Instruction **
类型。您需要像这样双重取消引用p
:
(*p)->execute();
*p
将求值为Instruction *
,并进一步在其上应用->
运算符将取消引用指针。