我正在研究一个应该将文件内容读入链表的程序,以便创建一个“超级卡堆栈”(我已经列出了具体的here)。
我知道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 :(得分:0)
您需要在命令行上将两个文件都路径到gcc。
[cs331129@cs ~]$ g++ -o prog6 program6test.cpp program6.cpp
请注意,您只需要将.cpp
个文件传递给编译器,因为它通过#include
指令找到了头文件。