我在访问存储在STL list
中的类的成员函数时遇到麻烦。我的代码如下:
typedef Shape* shapePtr;
list <shapePtr> shapeList;
//skip alot...
case x:
{
cout << "Enter the height \n";
cin >> height;
cout << "Enter the base \n";
cin >> base;
//computation.
shapeList.push_back(new Triangle);
shapeList->setHeight(height);
shapeList->setBase(base);
break;
}
这导致g ++出现以下错误:
“->”的操作数具有非指针类型
错误:“ * shapeList”中的“ operator *”不匹配
case x:
{
cout << "Enter the height \n";
cin >> height;
cout << "Enter the base \n";
cin >> base;
//computation.
shapeList.push_back(new Triangle);
(*shapeList).setHeight(height);
(*shapeList).setBase(base);
break;
}
导致以下错误:
错误:“ * shapeList”中的“ operator *”不匹配
最佳答案
shapeList
指整个列表。如果要列表的最后一个元素,请使用shapeList.back()
,它返回对最后一个元素的引用(在本例中为shapePtr&
)。
但是,由于看起来您正在调用特定于Triangle
实例的方法(我认为这是Shape
的子类),因此您不能直接与shapeList.back()
进行交互,因为Shape
不会。没有那些方法。您需要做的是将Triangle
实例的分配与添加到shapeList
分开。分配Triangle
并将其存储在本地变量中。然后可以将其添加到该列表,并通过该局部变量在其上调用setHeight
和setBase
。