Ошибка вложенного класса в C ++ "невозможно преобразовать ... в присваивании" - PullRequest
2 голосов
/ 06 марта 2011

Я новичок в C ++ и продолжаю получать это сообщение об ошибке в следующем классе:

class LinkedList {

    class Node *head;

    class Node {
        Student *student;
        Node *next;
        Node *prev;
    public:
        Node(Student *n_student, Node *n_next, Node *n_prev);
        ~Node();

        Student *getStudent() const;
        Node *getNext() const;
        Node *getPrev() const;
    };

public:
    LinkedList();
    ~LinkedList();
    void printList();
};

Метод, вызывающий ошибку:

void LinkedList::printList() {
    using namespace std;

    class Node *p_n;
    p_n = head; // ERROR!

    while (p_n) {
        cout << '[' << (*(*p_n).getStudent()).getId() << ']' << endl;
        p_n = (*p_n).getNext();
    }
}

Я получаю сообщение об ошибке:

ошибка: невозможно преобразовать 'Узел *' в LinkedList :: Node * в назначении

Я пытался привести Node к LinkedList :: Node, но продолжаю получать одно и то же сообщение. Я собираю его в XCode, не уверен, если это вызывает проблему.

Есть идеи, как это исправить?

1 Ответ

6 голосов
/ 06 марта 2011

Изменить это:

class Node *head;

На это:

Node *head;

Когда вы объявляете поле определенного класса внутри класса, вам не нужно ключевое слово class,Просто имя типа и соответствующий ему идентификатор.Например:

Node *n;
LinkedList *l;

Нет class ключевое слово.class Ключевое слово используется только тогда, когда вы фактически объявляете / определяете класс.

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