STD::list, un problème lors de l'utilisation d'attributs de type liste dans un o
mohamed_bn
Messages postés47Date d'inscriptionjeudi 9 novembre 2000StatutMembreDernière intervention10 septembre 2010
-
10 sept. 2010 à 19:26
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
11 sept. 2010 à 03:08
Bonjour,
J'ai une structure comme suit:
typedef struct DataFlow : public cObject {
std::list receivedPackets;
int numberOfPacketsNotYetAcknowledged;
...
}DataFlow;
puis, j'utilise un tableau de structure "Dataflow" (de même pour vecteur d'objets Dataflow).
Lorsque je stocke des éléments à cette liste, l'insertion se déroule correctement comme prévue (j'ai vérifié ceci dans la même fonction qui fait l'insertion).
Le problème c'est que lorsque je recherche par la suite l'un des éléments déjà insérés dans la liste (à partir du programme principal) je trouve que ça n'existe pas (et la taille de la liste est nulle). Au même temps, les autres attributs de type int, double,... sont bien remplis et contiennent les informations insérés.
Je voudrai bien savoir comment faire pour créer un attribut de type liste dans ma structure.
J'aime clarifier que tout marche correctement lorsque j'insère des éléments à un objet de type Dataflow et le problème apparait que lorsque j'utilise un tableau ou vecteur de strucure Dataflow
merci de m'aider à trouver une solution pour ce problème car le container list est le plus adéquat dans ma situation
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 10 sept. 2010 à 21:50
Déjà en C++, une structure est une classe dont la visibilité est publique par défaut.
Donc on écrit:
struct DataFlow : public cObject
{
std::list receivedPackets;
int numberOfPacketsNotYetAcknowledged;
...
};
ou
class DataFlow : public cObject
{
public:
std::list receivedPackets;
int numberOfPacketsNotYetAcknowledged;
...
};
(C'est pareil)
Je ne vois pas d'erreur dans ce que tu as fait, donc ton problème vient d'ailleurs (fais voir les morceaux de code qui exploitent ta structure).
________________________________________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
mohamed_bn
Messages postés47Date d'inscriptionjeudi 9 novembre 2000StatutMembreDernière intervention10 septembre 2010 10 sept. 2010 à 22:14
voici les méthodes qui exploitent la structure Dataflow:
void insertPacketSequenceNumber(uint16_t sequenceNumber)
{
receivedPackets.push_back(sequenceNumber);
numberOfPacketsNotYetAcknowledged++;
}
bool lookupPacketSequenceNumber(uint16_t sequenceNumber)
{
for (std::list::iterator it= receivedPackets.begin();it!=receivedPackets.end();it++)
{
if ((*it)==sequenceNumber)
return true;
}
return false;
}
dans le programme principal: le tableau de structures Dataflow est déclaré et instancié comme suit:
Déclaré:
typedef std::list<DataFlow*> DataFlows_t;
DataFlow *dataFlows_t;
Instancié:
dataFlows_t= new DataFlow[taille];
J'ai essayé même le container deque et il pose le même problème
Cordialement,
mohamed belhassen
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 11 sept. 2010 à 03:08
Là, comme cela, je ne vois pas.
Peux-tu essayer de vérifier que tu ne copies pas la structure sans faire exprès ? Tu remplirais alors le tableau d'une de ses copies, ce qui expliquerais ton problème.
Voici un exemple qui pourrait être une piste:
void fillList(DataFlow dataFlow)
{
dataFlow.receivedPackets ...
// Ici tu remplis ta liste "receivedPackets"
}
typedef std::list<DataFlow*> DataFlows_t;
DataFlow *dataFlows_t;
//Instancié:
dataFlows_t = new DataFlow[taille];
fillList(dataFlows_t[0]); // On veut remplir le tableau du premier element.
//dataflows_t[0].size => 0 à cause de la copie.
Pour corriger mon exemple, j'ajouterais une référence pour éviter la copie:
void fillList(DataFlow& dataFlow)
________________________________________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question