我在访问存储在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并将其存储在本地变量中。然后可以将其添加到该列表,并通过该局部变量在其上调用setHeightsetBase

09-27 23:06