指向结构的指针(优先级队列)

时间:2015-05-03 22:02:43

标签: c++ pointers c++11 struct

我是初学者(在C ++中,我来自C(6个月经验))并且我正在尝试创建优先级队列,但有些东西不起作用。 当我启动程序并编译它时,没有错误。但是屏幕上没有打印任何内容,程序崩溃了。

所以这是代码:

PriorityQueue.h

irb(main):021:0> puts ManageGroupsPage.groupsList.to_s
NoMethodError: undefined method `groupsList' for ManageGroupsPage:Class
from (irb):21
from C:/Ruby193/bin/irb:12:in `<main>'

PriorityQueue.cpp

using namespace std;

class PriorityQueue{
    private:
    struct pqentry_t{
        string value;
        float priority;
    };
    pqentry_t **_pqentry;
    int _size;
    int _next;

    public:
    PriorityQueue();
    ~PriorityQueue();
    void insert(string value, float priority);
    void printQueue();
};

的main.cpp

#include <iostream>
#include <string>
#include "PriorityQueue.h"

#define SIZE 8
using namespace std;

PriorityQueue::PriorityQueue(){
    _size = SIZE;
    _next = 0;
    _pqentry = new pqentry_t*[_size];
}

PriorityQueue::~PriorityQueue(){
    delete[] _pqentry;
}

void PriorityQueue::insert(string value, float priority){
    _pqentry[_next]->value = value;    // this is probably not working
    _pqentry[_next]->priority = priority;
    _next++;
}

void PriorityQueue::printQueue(){
    for (int i = 0; i < _next; i++){
            cout << "Value: " << _pqentry[i]->value << endl
                 << "Priority: " << _pqentry[i]->priority << endl;
        }
        cout << endl;
}

我想,我知道错误的位置,在PriorityQueue.cpp中,这里:

#include <iostream>
#include <string>
#include "PriorityQueue.h"

using namespace std;

int main()
{
    PriorityQueue pq;
    pq.insert("Banana", 23);
    pq.printQueue();
}

但我不知道什么是错的,我无法修复它。编译器说没有错误。

我希望,你可以帮助我。提前谢谢!

2 个答案:

答案 0 :(得分:0)

您确实分配了_pqentry成员,但您还需要分配此数组的每个条目,例如:

_pqentry [_next] = new pqentry_t;

在写信之前

。 并且不要忘记删除那些:)

答案 1 :(得分:0)

看起来你正在构造函数中创建一个指向pqentry_t的指针数组,但是你的insert方法期望它本身就是一个_pqentry结构的数组。您没有为pqentry_t元素本身分配空间,因此当您尝试在insert方法中取消引用它们时,程序崩溃。

尝试将类中_pqentry的定义更改为pqentry_t * _pqentry,并将构造函数中的分配更改为新的pqentry_t [size]。这将允许您的insert和printQueue方法在写入时访问_pqentry的条目。