2016-11-10 7 views
-1

Я пытаюсь создать связанный список, чтобы загрузить файл txt и использовать связанный список для обработки файла по строкам. При обработке загруженного Linked List на нем будут выполняться операции, такие как текстовый редактор. Однако я сталкиваюсь с некоторыми проблемами. Кажется «Узел (строковое значение)» раздел кода имеет что-то не так с ним, хотя оригинальное объявление Node() без аргументов проходит. Я не могу понять, что это такое.C++ Связанный список

node.h

class Node 
{ 
public: 
    Node(); 
    Node(string value); 
    void setNext(Node *nextNode); // Allows the user to set where the "next" pointer of a node points 

    friend class LinkedList; 
private: 
    string data; // Data box 
    Node* next; // Pointer box 
}; 

node.cpp

# include <string> 
# include "Node.h" 

using namespace std; 

Node::Node() 
{ 
    data = ""; 
    next = NULL; 
} 

Node::Node(string value) 
{ 
    data = value; 
    next = NULL; 
} 

void Node::setNext(Node *nextNode) // Allows the user to set where the "next" pointer of a node points 
{ 
    this->next = nextNode; 
} 
+2

Пожалуйста, более конкретно, чем "некоторые проблемы" и "что-то неправильно". Разве это не компилируется? Это крушение? Печатает ли «0x3434» на всем терминале? Вызывает ли она полицию и сообщает, что вы пропали без вести? – molbdnilo

+0

@molbdnilo, может быть, он просто публикует случайные вопросы на SO? ;) – SergeyA

+0

Приводятся следующие ошибки: Отсутствует спецификатор типа - int. Строка: 17 'data': неизвестный спецификатор переопределения Строка: 17 – Blake

ответ

2

Ваш #include <string> должен быть в файле заголовка, так как именно вы используете std::string типа с вашими методами.

Поскольку не рекомендуется добавлять using namespace в заголовочных файлах (см this answer для получения дополнительной информации), объявлять типы строк с пространством имен: изменить ваш string value к std::string value

Ваши файлы будут выглядеть следующим образом (скомпилировать тест был сделано с GCC)

Также вы должны положить включать охрану в файле заголовка

Пример:

// some_header_file.h 
#ifndef SOME_HEADER_FILE_H 
#define SOME_HEADER_FILE_H 
// your code 
#endif 

node.h

#include <string> 

class Node 
{ 
public: 
    Node(); 
    Node(std::string value); 
    void setNext(Node *nextNode); // Allows the user to set where the "next" pointer of a node points 

    friend class LinkedList; 
private: 
    std::string data; // Data box 
    Node* next; // Pointer box 
}; 

node.cpp

#include "Node.h" 
#include <cstddef> // For NULL 

Node::Node() 
{ 
    data = ""; 
    next = NULL; 
} 

Node::Node(std::string value) 
{ 
    data = value; 
    next = NULL; 
} 

void Node::setNext(Node *nextNode) // Allows the user to set where the "next" pointer of a node points 
{ 
    this->next = nextNode; 
} 
+0

[Или, может быть, '#pragma once' вместо включения охранников] (http: // stackoverflow.com/questions/1143936/pragma-once-vs-include-guard) –

+0

Он предполагает, что строка не является компонентом библиотеки std. Также у меня уже есть #ifndef NODE_H #define NODE_H и #endif .. они просто не то, о чем я прошу. – Blake

+0

*** Предполагается, что строка не является компонентом библиотеки std. *** Вы заменили 'string' на' std :: string' в файле заголовка и cpp? – drescherjm

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