Вызов функции-члена внутри функции-члена - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь создать функцию-член, которая принимает четыре входа, основной список, ключ и два дополнительных списка.Затем он делит основной список на два вторичных списка на основе ключа.

Это из книги по программированию, поэтому там должна быть функция-член.

Я получаю эту ошибку: «базовый операнд» -> »имеет тип без указателя'UnsortedType'.

Это целая функция, вызывающая проблему.

void UnsortedType::SplitLists(UnsortedType list,
                              ItemType item,
                              UnsortedType& list1,
                              UnsortedType& list2){
    ItemType whichItem;

    int numItems = list.GetLength();

    //Loop through all items in the list
    for(int i = 0; i < numItems; i ++){
        whichItem = list.GetNextItem();
        try{
            switch(whichItem.ComparedTo(item)){
                case LESS:
                case EQUAL:
                    if(list1->isFull()){//Error thrown on this line
                        throw std::string("List1 is full.");
                        return;
                    }
                    //add item to list1
                    list1->PutItem(whichItem);//Error thrown on this line
                break;
                case GREATER:
                    if(list2->isFull()){//Error thrown on this line
                        throw std::string("List2 is full.");
                        return;
                    }
                    //add item to list2
                    list2->PutItem(whichItem);//Error thrown on this line
                break;

            }
        }
        catch(std::string e){
            std::cout << e << std::endl;
        }
    }
};

Обратите внимание, что "list1" и "list2" - это UnsortedTypes, переданные по ссылке, и я думаю, что это частьпроблемы.

Что я делаю не так?

Спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Ссылки могут быть использованы, как если бы вы просто использовали оригинальный объект.Если вы передадите что-то по ссылке, тогда вы можете просто использовать . вместо ->

void UnsortedType::SplitLists(UnsortedType list,
                              ItemType item,
                              UnsortedType& list1,
                              UnsortedType& list2){
    ItemType whichItem;

    int numItems = list.GetLength();

    //Loop through all items in the list
    for(int i = 0; i < numItems; i ++){
        whichItem = list.GetNextItem();
        try{
            switch(whichItem.ComparedTo(item)){
                case LESS:
                case EQUAL:
                    if(list1.isFull()){//Error thrown on this line
                        throw std::string("List1 is full.");
                        return;
                    }
                    //add item to list1
                    list1.PutItem(whichItem);//Error thrown on this line
                break;
                case GREATER:
                    if(list2.isFull()){//Error thrown on this line
                        throw std::string("List2 is full.");
                        return;
                    }
                    //add item to list2
                    list2.PutItem(whichItem);//Error thrown on this line
                break;

            }
        }
        catch(std::string e){
            std::cout << e << std::endl;
        }
    }
};
0 голосов
/ 16 апреля 2019

Вы передаете ссылку, а не указатель.

Тип и тип // Ссылка используется как type.do_smth ()

Тип * тип // Указатель используется как type-> do_smth () // потому что сначала нужно «разыменовать» его.

Обычно указатель является оберткой вокруг ссылки.Указатель содержит ссылку на что-то.

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