list C ++中的类

时间:2014-11-06 17:15:53

标签: c++ list class linked-list

我正在研究一个应该将文件内容读入链表的程序,以便创建一个“超级卡堆栈”(我已经列出了具体的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

另请注意,虽然我收到了需要解决的错误,但这不是此问题的主要目的。

我很抱歉,如果这真的很广泛,我真的不明白这一点,所以不知道如何进一步缩小范围。任何人都可以帮我弄清楚如何使用列表类来解决这个问题,同样,程序的细节可以在我之前在帖子中提供的链接中找到。

1 个答案:

答案 0 :(得分:0)

您需要在命令行上将两个文件都路径到gcc。

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

请注意,您只需要将.cpp个文件传递给编译器,因为它通过#include指令找到了头文件。