Как получить доступ к членам в связанном списке внутри связанного списка - PullRequest
0 голосов
/ 27 апреля 2019

Мне нужно получить доступ к членам класса связанного списка внутри связанного списка.Я могу нормально управлять своим списком Artist, но не могу установить int x в моем классе SongList.Я попытался установить его с помощью *(temp->songHead).x = 5;, *temp->songHead.x = 5;, *(temp->songHead)->x = 5; и *temp->songHead->x = 5;.

. Когда я его скомпилирую, я получаю сообщение об ошибке:

недопустимоиспользование неполного типа 'struct songList'

Как установить int x?

#ifndef LINKED_LIST
#define LINKED_LIST
class SongList{
    public:
        SongList();
        int x;
        void add(int x);
    private:
        struct Song{
            char *name;
            int minutes;
            int seconds;
            int views;
            int likes;
            Song *next;
        };
        Song *head;
};

class LinkedList{
    public:
        LinkedList();
        ~LinkedList();

        void test(int x);
        void add(char ch);
        bool find(char ch);
        bool del(char ch);
        void list();

    private:
        struct Artist{
            char character;
            Artist *next;
            struct songList *songHead;
            SongList ptr;
        };
        Artist *head;
};
#endif

// Code to set int x
void LinkedList::test(int x){
    struct Artist *temp;
    temp = head;
    *(temp->songHead).x = 5;
}

1 Ответ

0 голосов
/ 27 апреля 2019

C ++ не требует добавления struct перед объявлениями переменных, содержащих struct s.Добавление его позволяет использовать неопределенные типы в объявлениях переменных.

Если вы удалите struct, вы быстро увидите истинную причину вашей ошибки:

songList *songHead;

выдаст ошибкучто-то вроде этого (это из clang, другие компиляторы могут быть не так полезны):

ошибка: неизвестное имя типа 'songList';Вы имели в виду «SongList»?

Ваш доступ к songHead также неверен:

*(temp->songHead).x = 5;

Это эквивалентно:

*(temp->songHead.x) = 5;

Чтовы на самом деле хотите это:

(*temp->songHead).x = 5;

или проще:

temp->songHead->x = 5;
...