我有一个指令类型列表。指导是我做的一门课。此类具有一个称为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*’

最佳答案

pInstruction *指针的迭代器。您可以将其视为Instruction **类型。您需要像这样双重取消引用p:

(*p)->execute();
*p将求值为Instruction *,并进一步在其上应用->运算符将取消引用指针。

10-07 23:25