список классов в C ++

0

Я работаю над программой, которая должна читать содержимое файла в связанном списке, чтобы создать "стек гиперкарта" (здесь перечислены особенности).

Я знаю, что класс в стандартной библиотеке C++, но поскольку я никогда раньше не работал со стандартной библиотекой, я понятия не имею, как заставить ее работать с этой конкретной проблемой.

Вот код, который мне удалось найти до сих пор, собрав вместе кусочки интерактивных учебников, с которыми я столкнулся.

Мой файл.h:

//program6.h
#include <iostream>
#include <fstream>
#include <string>
#include <list>
using namespace std;

class Node {
public:
    Node();
    Node(char code, int num, string data);
    Node(Node & node);
    ~Node();

    bool readFile();
    void setNext(Node* next);
    void print();

private:
    char Code;
    int Num;
    string Data;
    Node *Next;
};

Мой файл реализации:

//program6.cpp
#include "program6.h"
#include <iostream>
#include <fstream>
#include <list>
using namespace std;

Node::Node() {
    Code = '\0';
    Num = 0;
    Data = "";
    Next = NULL;
}

Node::Node(char code, int num, string data) {
    Code = code;
    Num = num;
    Data = data;
    Next = NULL;
}

Node::Node(Node & node) {
    Code = node.Code;
    Num = node.Num;
    Data = node.Data;
    Next = NULL;
}

Node::~Node() {
}

bool Node::readFile() {
    char code = '\0';
    int num = 0;
    string data = "";

    ifstream inputFile;
    inputFile.open("prog6.dat");

    if(!inputFile) {
        cerr << "Open Faiulre" << endl;
        exit(1);
        return false;
    }

    Node *head = NULL;
    while(!inputFile.eof()) {
        inputFile >> code >> num >> data;

        Node *temp = new Node(code, num, data);
        temp->setNext(head);
        head = temp;
    }

    inputFile.close();
    head->print();
    return true;
}

void Node::setNext(Node* next) {
    Next = next;
}

void Node::print() {
    cout << Code << " " << Num << " " << Data;
    if(Next != NULL) 
        Next->print();
}

И мой основной/тестовый файл:

//program6test.cpp
#include "program6.h"
#include <iostream>
#include <fstream>
#include <list>
using namespace std;

int main() {
    Node list;
    if(list.readFile()) 
        cout << "Success" << endl;
    else
        cout << "Failure" << endl;

    return 0;
}

И вот этот файл мне нужно прочитать:

i 27 Mary had a little lamb
i 15 Today is a good day
i 35 Now is the time!
i 9 This lab is easy and fun
p
d 35
t
i 37 Better Now.
f
p
h
p
d 27
d 15
d 37
d 9
i 44 This should be it!
t
p

Обновление Благодаря ответу ниже я смог избавиться от ошибок "неопределенной ссылки", которые я получал изначально, однако, вот ошибка, которую я получаю, когда запускаю программу сейчас.

terminate called after throwing an instance of 'St9bad_alloc'
  what():  St9bad_alloc
Aborted

Также имейте в виду, что, хотя я получаю ошибку, которую необходимо решить, это не основная цель этого вопроса.

Мне жаль, если это действительно широко, я действительно не понимаю этого, поэтому не знаю, как сузить его дальше. Может ли кто-нибудь помочь мне выяснить, как использовать список класса для решения этой проблемы, опять же, особенности программы можно найти по ссылке, которую я ранее предоставил в сообщении.

  • 0
    Почему вы объявляете класс Node в файле .cpp, если вы уже объявили его в одном из файлов .h, который вы включаете?
  • 0
    Потому что я не знаю, что я делаю.
Показать ещё 5 комментариев
Теги:
class
list
linked-list

1 ответ

0

Вам нужно указать оба файла в gcc в командной строке.

[cs331129@cs ~]$ g++ -o prog6 program6test.cpp program6.cpp

Обратите внимание, что вам нужно только передать файлы .cpp в компилятор, так как он находит свой путь к файлам заголовков с помощью директив #include.

  • 0
    Это избавило от ошибок компилятора, однако теперь, когда я запускаю его, я получаю сообщения об ошибках «вызов прекращается после выброса экземпляра St9bad_alloc what (): St9bad_alloc Aborted»
  • 0
    Это совершенно другая проблема.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню