2015-09-06 3 views
1

У меня возникли проблемы с созданием связанного списка, который использует класс LinkedList10 и Node. В классе List, как мне создать объекты head, curr и temp? Я думал, что могу просто инициализировать их как объекты, которые затем вызывают конструктор по умолчанию Node() и назначают им переменную данных и указателя. Но я получаю ошибку: ‘Node’ does not name a type и ‘head’ was not declared in this scope для объектов head, curr и temp. Вот мой код:Ошибка: не называет тип (C++)

LinkedList.cpp:

#include <iostream> 
#include <cstdlib> 
#include "LinkedList.h" 
#include "Node.h" 

using namespace std; 

LinkedList::LinkedList() { 
    head = NULL; 
    curr = NULL; 
    temp = NULL; 

    cout << "Blank list created." << endl; 
} 

LinkedList::LinkedList(value_type addData) { 
    Node n(addData); 
} 

LinkedList.h:

class LinkedList { 
    public: 
     typedef std::string value_type; 

     LinkedList(); 
     LinkedList(value_type addData); 

    private:   
     Node head; 
     Node curr; 
     Node temp; 
}; 

node.cpp:

#include <iostream> 
#include <cstdlib> 
#include "Node.h" 

using namespace std; 

Node::Node() { 
    nodePtr n = new node; 
    n->next = NULL; 
    n->data = NULL; 

} 

Node::Node(value_type addData) { 
    nodePtr n = new node; 
    n->next = NULL; 
    n->data = addData; 

} 

node.h:

class Node { 
    public: 
     typedef std::string value_type; 

     Node(); 
     Node(value_type addData); 
    private: 
     struct node { 
      value_type data; 
      node* next; 
     }; 

     typedef struct node* nodePtr; 

}; 

Любая помощь будет принята с благодарностью, спасибо, ребята!

+0

Добавить '#include 'Node.h" 'в' LinkedList.h'. – songyuanyao

ответ

0

Посмотрите, что делает компилятор с LinkedList.c. Она начинается с этого:

... 
#include "LinkedList.h" 
#include "Node.h" 
... 

Затем он оценивает #include директивы, так и тянет LinkedList.h и Node.h в источник:

... 
class LinkedList { 
... 
    Node head; 
    Node curr; 
    Node temp; 
}; 

class Node { 
... 
}; 

Затем он пытается скомпилировать это, становится, насколько «Узел головы; " (когда он еще не достиг объявления класса Node), и жалуется, что он не знает, о чем вы говорите.

Файл, который объявляет class LinkedList, должен знать, что такое Node. Поместите #include "Node.h" в верхней части LinkedList.h (и добавьте защитники заголовка в Node.h), и у вас не будет этой проблемы.

+0

Ahh хорошо. Хорошо, я попробовал это и только что получил больше ошибок: [link] (http://i.imgur.com/mlRDT1g.png), что я не знаю, что они говорят. И у меня есть загонщики, просто пытался конденсировать сообщение, поэтому я их не включил. – Lachie

+2

@Lachie: Вы написали много кода, не тестировав его, тогда вы решили проблему, которая остановила компилятор в верхней части файла; теперь компилятор может пройти мимо этого пункта и кричать о многих других ошибках. Я думаю, что лучший способ перейти отсюда - либо упростить код до тех пор, пока не будет ошибок, либо просто начнется с нуля, а затем повторно установите сложность медленно, тестирование на каждом шаге и ** никогда не добавляйте к коду, который не работает. ** (PS вы понятия не имеете, о чем относятся эти сообщения об ошибках? Google может помочь, также как и переполнение стека.) – Beta

+0

Хорошо, спасибо друг. – Lachie

Смежные вопросы