我的代码有一些问题。
似乎我只能在特定功能中访问优先级队列的顶部。
我收到此错误:
Unhandled exception at at 0x77644B32 in ConsoleApplication5.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x00D7E6A8.
让我举个例子更清楚一点:
如果我做一个
cout << *nameofmyqueue->top() ;
在一个名为它的函数中firstFunction
,它会完美地工作。但如果我在 中使用它otherFunction
,我会得到一个访问内存错误。这是我的代码:(这里有评论它有效,而它没有)
没有问题
void Ordinateur::addmessageAEnvoyer(Message* message){
不适用于
void Ordinateur::envoiMessages(){
任何想法为什么它不起作用?
非常感谢 !
#ifndef _ORDINATEUR_H_
#define _ORDINATEUR_H_
#include "PrioriteMessage.h"
#include "Reseau.h"
#include "Message.h"
#include <queue>
#include<iostream>
using namespace std;
class Ordinateur
{
public:
Ordinateur();
Ordinateur(string nom,int adresse,Reseau* adresseReseau);
~Ordinateur();
int getAdresse() const;
string getNom()const;
Reseau* getAdresseReseau() const;
void addmessageAEnvoyer(Message* message);
void envoiMessages();
void recoiMessages(Message* messageRecu);
void afficherMessagesRecus();
void afficherOrdinateur(ostream& ostr);
friend ostream& operator<< (ostream& ostr, Ordinateur& ordinateur );
private:
int adresse_;
string nom_;
Reseau* adresseReseau_;
priority_queue<Message*,vector<Message*>,PrioriteMessages> listMessagesAEnvoyer_;
vector<Message*> messagesRecus_;
};
#endif
`#include"Ordinateur.h"
#include <queue>
Ordinateur::Ordinateur(){
nom_ = "default";
adresse_ = 0;
}
Ordinateur::Ordinateur(string nom,int adresse,Reseau* adresseReseau){
nom_ = nom;
adresse_ = adresse;
adresseReseau_ = adresseReseau;
}
Ordinateur::~Ordinateur()
{
}
int Ordinateur::getAdresse()const{
return adresse_;
}
string Ordinateur::getNom()const{
return nom_;
}
Reseau* Ordinateur::getAdresseReseau() const{
return adresseReseau_;
}
void Ordinateur::addmessageAEnvoyer(Message* message){
listMessagesAEnvoyer_.push (message);
cout << *listMessagesAEnvoyer_.top(); // NO PRPOBLEM HERE
}
void Ordinateur::envoiMessages(){
cout << *listMessagesAEnvoyer_.top(); // PROBLEM HERE
while(!listMessagesAEnvoyer_.empty())
{
if (listMessagesAEnvoyer_.top()->getnomDestinataire ()!= "0"){
adresseReseau_->envoiMessageNom(*listMessagesAEnvoyer_.top(),listMessagesAEnvoyer_.top()->getnomDestinataire ());
}
else if (listMessagesAEnvoyer_.top()->getnomDestinataire() == "0")
adresseReseau_->envoiMessageTous(*listMessagesAEnvoyer_.top());
listMessagesAEnvoyer_.pop();
}
}
void Ordinateur::recoiMessages(Message* messageRecu){
cout << nom_ << " #"<< adresse_<<" " <<" Reception d'un message.."<< endl;
messagesRecus_.push_back (messageRecu);
}
void Ordinateur::afficherOrdinateur (ostream& ostr){
ostr << nom_ << " #"<< adresse_<<" ";
}
void Ordinateur::afficherMessagesRecus(){
cout << nom_ << " #"<< adresse_<<" Affichage des messages recus ("<<messagesRecus_.size ()<<"):"<<endl;
for (unsigned int i = 0; i < messagesRecus_.size (); i++)
{
cout << messagesRecus_[i]<<endl;
}
}
ostream& operator<<( ostream& ostr, Ordinateur& ordinateur ){
ordinateur.afficherOrdinateur (ostr);
return ostr;
}`