Я работаю над программой, которая должна читать содержимое файла в связанном списке, чтобы создать "стек гиперкарта" (здесь перечислены особенности).
Я знаю, что класс в стандартной библиотеке 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
Также имейте в виду, что, хотя я получаю ошибку, которую необходимо решить, это не основная цель этого вопроса.
Мне жаль, если это действительно широко, я действительно не понимаю этого, поэтому не знаю, как сузить его дальше. Может ли кто-нибудь помочь мне выяснить, как использовать список класса для решения этой проблемы, опять же, особенности программы можно найти по ссылке, которую я ранее предоставил в сообщении.
Вам нужно указать оба файла в gcc в командной строке.
[cs331129@cs ~]$ g++ -o prog6 program6test.cpp program6.cpp
Обратите внимание, что вам нужно только передать файлы .cpp
в компилятор, так как он находит свой путь к файлам заголовков с помощью директив #include
.
Node
в файле .cpp, если вы уже объявили его в одном из файлов .h, который вы включаете?