Контейнерный класс списка STL, определенный программистом Классы - PullRequest
0 голосов
/ 27 ноября 2010

У меня проблемы с доступом к функциям-членам классов, хранящихся в 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

     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"

1 Ответ

3 голосов
/ 27 ноября 2010

shapeList относится к списку в целом.Если вы хотите последний элемент списка, используйте shapeList.back(), который возвращает ссылку на последний элемент (в данном случае shapePtr&).

Однако, поскольку похоже, что вы вызываете методыкоторые специфичны для Triangle экземпляров (я полагаю, это подкласс Shape), поэтому вы не можете напрямую взаимодействовать с shapeList.back(), потому что Shape не имеет этих методов.Вам нужно выделить выделение экземпляра Triangle и добавить его к shapeList.Выделите Triangle и сохраните его в локальной переменной.Затем вы можете добавить его в этот список и вызвать setHeight и setBase для него через эту локальную переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...