В вашей функции PrintList у вас есть один аргумент типа List:
void PrintList ( List list )
При попытке доступа к нему с помощью list.getFirst () все работает нормально. Когда вы пытаетесь сделать list-> getLast (), компилятор генерирует ошибку, которая говорит вам, что ваша переменная не является указателем типа. В вашей короткой функции PrintList вы, вероятно, захотите заменить все свои -> на. оператор. Если вы хотите использовать ->, вы должны сделать что-то вроде:
List * listptr = new List();
listptr->getFirst();
listptr->getLast();
В противном случае просто замените вторую строку на: Node * temp2 = list.getLast ();
Вы можете создать пользовательский оператор ->, но я не думаю, что это действительно то, что вы хотите делать.
Кроме того, я не слишком внимательно изучал это, но закончится ли когда-нибудь ваш цикл while? Если вызовы getItemName не изменят значение узла, похоже, он может продолжаться вечно.