用于存储航班的LinkedQueue实现

时间:2019-03-19 12:27:31

标签: c++ pointers data-structures segmentation-fault

我正在尝试在c ++中实现LinkedQueue结构来存储某些航班的数据。

因此,首先我必须读取一个csv文件,该文件提供要存储的数据。 LinkedQueue必须以这种方式工作:必须使用Flight类存储每个Flight的属性,然后LinkedQueue必须具有一个称为FlightNode的特定节点才能最终存储航班。 我的代码无法编译,因为我无法以正确的方式实现getNext()函数。

我在下面的代码中提供了每个类的实现。如果你们可以提出任何建议,那将非常有帮助。

非常感谢!

这是我的Flight.h标头类:

class Flight { 
public:
    Flight();
    virtual ~Flight();
    string getID();
    void setID(string new_id);
    string getOrigen();
    void setOrigen(string new_origen);
    string getDesti();
    void setDesti(string new_desti);
    string getHora();
    void setHora(string new_hora);

private:
    string id;
    string origen;
    string desti;
    string hora_sortida;

};

Flight.cpp:

Flight::Flight() {

}

Flight::~Flight() {
}

string Flight::getID(){
    return id;
}

string Flight::getOrigen(){
    return origen;
}

string Flight::getDesti(){
    return desti;
}

string Flight::getHora(){
    return hora_sortida;
}

void Flight::setID(string new_id){
    id = new_id;
}

void Flight::setOrigen(string new_origen){
    origen = new_origen;
}

void Flight::setDesti(string new_desti){
    desti = new_desti;
}

void Flight::setHora(string new_hora){
    hora_sortida = new_hora;
}

FlightNode.h:

class FlightNode {
public:
    FlightNode(Flight& f);
    FlightNode(const FlightNode& orig);
    virtual ~FlightNode();
    FlightNode* getNext();
    void setNext(FlightNode* n);
    Flight& getElement();
private:
    Flight* _element;
    FlightNode* _next;

};

FlightNode.cpp:

FlightNode::FlightNode(Flight& f) {
    this->_element = &f;
    this->_next = nullptr;
}

FlightNode::FlightNode(const FlightNode& orig) {
}

FlightNode::~FlightNode() {
}
FlightNode* FlightNode::getNext(){
    return this->_next;
}

void FlightNode::setNext(FlightNode* n){
    this->_next = n; 
}

Flight& FlightNode::getElement(){
    //Don't know how to implement this one, because I declared _element as a pointer but what I need here is to return a reference. 
}

main.cpp:

    string id;
    string origen;
    string desti;
    string hora;

            fstream fin;
            fin.open("flights.csv", ios::in);

            string line, word;
            string id, origen, desti, hora;

            while (getline(fin, line)) {
                stringstream in(line);
                Flight* new_flight = new Flight;
                for (int i = 0; getline(in, word, ','); ++i) {
                    switch (i) {
                        case 0:
                            new_flight->setID(word);
                            break;
                        case 1:
                            new_flight->setOrigen(word);
                            break;
                        case 2:
                            new_flight->setDesti(word);
                            break;
                        case 3:
                            new_flight->setHora(word);
                            break;
                    }
                }
                cout << "id:" << new_flight->getID() << "  origen:" << new_flight->getOrigen() << "  desti: " << new_flight->getDesti() << endl;
                queue.enqueue(*new_flight);
            }

1 个答案:

答案 0 :(得分:0)

您可以只返回指针后面的引用:

return *_element;

但是,如果您打算这样做,请确保在上述取消引用时指针不为空。