STL列表容器类程序员定义的类

时间:2010-11-27 02:03:04

标签: c++ list stl

我无法访问存储在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 ++出现以下错误:

  < - >'&gt;'的操作数具有非指针类型

     

错误:'* 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 *'不匹配

1 个答案:

答案 0 :(得分:3)

shapeList指的是整个列表。如果您想要列表的最后一个元素,请使用shapeList.back(),它返回对最后一个元素的引用(在这种情况下为shapePtr&)。

但是,因为看起来你正在调用特定于Triangle实例的方法(我假设它是Shape的子类),所以你不能直接与{{1因为shapeList.back()没有这些方法。您需要做的是将Shape实例的分配与将其添加到Triangle分开。分配shapeList并将其存储在本地变量中。然后,您可以将其添加到该列表中,并通过该局部变量在其上调用TrianglesetHeight