begin process at 2012 05 30 11:43:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

STD::list, un problème lors de l'utilisation d'attributs de type liste dans un objet stockée dans un tableau ou vector


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

STD::list, un problème lors de l'utilisation d'attributs de type liste dans un objet stockée dans un tableau ou vector

vendredi 10 septembre 2010 à 19:26:44 | STD::list, un problème lors de l'utilisation d'attributs de type liste dans un objet stockée dans un tableau ou vector

mohamed_bn


Bonjour,

J'ai une structure comme suit:
typedef struct DataFlow : public cObject {

std::list<uint16_t> 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

med belhassen
vendredi 10 septembre 2010 à 21:50:57 | Re : STD::list, un problème lors de l'utilisation d'attributs de type liste dans un objet stockée dans un tableau ou vector

CptPingu

Administrateur CodeS-SourceS
Déjà en C++, une structure est une classe dont la visibilité est publique par défaut.
Donc on écrit:
Code C/C++ :
struct DataFlow : public cObject
{
  std::list<uint16_t> receivedPackets;
  int numberOfPacketsNotYetAcknowledged;
...
};

ou
Code C/C++ :
class DataFlow : public cObject
{
public:
  std::list<uint16_t> 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

Merci d'utiliser Réponse acceptée si un post répond à votre question
vendredi 10 septembre 2010 à 22:14:44 | Re : STD::list, un problème lors de l'utilisation d'attributs de type liste dans un objet stockée dans un tableau ou vector

mohamed_bn

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<uint16_t>::iterator it= receivedPackets.begin();it!=receivedPackets.end();it++)
{
if ((*it)==sequenceNumber)
return true;
}
return false;
}


void addDataPacketSequenceNumberToItsDataFlow(nsaddr_t source,nsaddr_t destination, uint16_t sequenceNumber)
{
DataFlow *f=getFlow(source,destination);
if(f!=NULL)
{
f->insertPacketSequenceNumber(sequenceNumber);
}
else
{
dataFlows_t[currentNumberOfFlows].insertPacketSequenceNumber(sequenceNumber);
dataFlows_t[currentNumberOfFlows].flowSource=source;
dataFlows_t[currentNumberOfFlows].flowDestination=destination;
currentNumberOfFlows++;
}
}


DataFlow* getFlow(nsaddr_t src, nsaddr_t dest)
{
for(uint i=0;i<currentNumberOfFlows;i++)
{
//DataFlow * f=check_and_cast<DataFlow*>(*it);
if((dataFlows_t[i].flowSource==src)&&(dataFlows_t[i].flowDestination==dest))
return &dataFlows_t[i];
}
return NULL;

}


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
samedi 11 septembre 2010 à 03:08:31 | Re : STD::list, un problème lors de l'utilisation d'attributs de type liste dans un objet stockée dans un tableau ou vector

CptPingu

Administrateur CodeS-SourceS
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:
Code C/C++ :

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:

Code C/C++ :
void fillList(DataFlow& dataFlow)


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio

Merci d'utiliser Réponse acceptée si un post répond à votre question


Cette discussion est classée dans : problème, type, liste, list, dataflow


Répondre à ce message

Sujets en rapport avec ce message

Problème avec les structures [ par _michel ] J'ai un problème avec la compilation de mon programme. J'ai une vigtaine de fois la même erreur : "syntax error before '(' token".Voilà un exempl Problème avec les nombres aléatoires [ par nisaloncaje ] Bonjour, j'ai un petit problème : dans un programme , pour générer un nombre aléatoire je fais ceci : int n,max=50,liste[15];for(i=0;isrand(time(0));  list avec NMFTP [ par critorix ] Bonjour a tous,J'utilise le composant NMFTP pour creer un client FTP et je souhaite recuperer le nom, la date de derniere modification, ainsi que la t Effacer élement liste stl [ par poiuytrez3 ] Bonjour,J'utilise depuis très peu de temps la stl.J'ai un problème lors de la suppression d'un élément d'une liste.Voici mon problème : J'ai une liste Liste stl et fonction constante [ par poiuytrez3 ] Bonjour,J'ai une erreur de compilation lorsque je veux définir un cursor au début de ma liste qui est dans mon objet.La fonction est constante et le c Iterateurs [ par dinarea ] Bonjour,Je travaille sur les collections. Mais en voulant personnaliser le code, j'ai un petit problème. Pouvez-vous m'aider pour ce problème svp?Voic Type Booléen [ par Oumnya ] Salut :-)   SVP, Est ce que quelqu'un peut m'expliquer pourquoi la déclaration des types(surtout quelques uns )diffère d'un logiciel de C++ à l'autre? Fusion de cellules pour une liste chainée [ par ouhare ] Bonjour tout le monde. J'aurais une question concernant une fonction en C que j'appelerais merge_list(). Cette fonction est supposée fusionner 2 cellu initialiser une liste : fonction récursive ? [ par netwebzone ] Bonjour Je dois créer une fonction qui initialise une liste chaînée à partir d'un nombre d'élement passé en paramètre pour la taille de la liste. J'ai count et STL ?? [ par Clercq ] Re bonjour,Dans ma mission de conversion de MFC en STL je me suis confronter un un petit problemeanciennement j'avais :typedef Clist array_member_list


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,122 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales