IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

utilisation d'un ofstream dans un vector


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Par défaut utilisation d'un ofstream dans un vector
    Bonjour,

    Je travaille en ce moment sur la bibliothèque opencv afin de réaliser un projet universitaire qui doit détecter un certain nombre de couleurs sur une image issue d'une webcam et enregistrer leurs coordonnées dans différents fichiers.

    CEPENDANT, ma question n'a rien a voir avec cette bibliothèque.

    Les couleurs ainsi que les flux sont enregistrées dans un vector.
    Cependant, je me heurte à un problème lors de la création de flux dans un vector. Voici le code, ce sera plus parlant !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    // structure Couleur
    struct couleur
    {
        int rouge, vert, bleu;
        ofstream file;
    };
     
    // Mon vector dans le main
    vector<couleur> couleurs;
     
    // Fonction ajoutant un point au vector lorsqu'on clique sur l'image
    void add_point (int event, int x, int y, int flags, void* param)
    {
        int precision=2;
        // Conversion param
        vector<couleur> *couleurs = (vector<couleur>*) param;
     
        if (event == CV_EVENT_LBUTTONDOWN) {
     
            // Création d'une couleur
            couleur colorTemp;
            colorTemp.rouge=getPixel1(image, y, x, 2);;
            colorTemp.vert=getPixel1(image, y, x, 1);
            colorTemp.bleu=getPixel1(image, y, x, 0);
     
            // Création du flux de sortie pour enregistrer les coordonnées
            ostringstream ossRouge; // conversion int en string
            ossRouge << colorTemp.rouge;
            string sRouge = ossRouge.str();
     
            ostringstream ossVert;
            ossVert << colorTemp.vert;
            string sVert = ossVert.str();
     
            ostringstream ossBleu;
            ossBleu << colorTemp.bleu;
            string sBleu = ossBleu.str();
     
            string nameFile (sRouge + "_" + sVert + "_" + sBleu + ".txt");
     
            // Ouverture du fichier
            colorTemp.file.open(nameFile.c_str(), ios::out | ios::trunc);
            // Si on a réussit à créer le fichier
            if (colorTemp.file) {
                // Ajout de la couleur au vector
                couleurs->push_back(colorTemp);
            }
        }
    }
    J'ai testé plusieurs façon mais celle-ci me parait la plus "propre".
    Quelque chose vous parait-il incohérent ?
    Est-il possible d'utiliser les flux dans les vector ?
    Ou alors savez vous comment résoudre mon problème ?

  2. #2
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Je comprends pas du tout cette ligne :

    vector<couleur> *couleurs = (vector<couleur>*) param;

    sachant que tu déclares ton vector statiquement dans le main...


    D'autant plus qu'a la fin du code tu réutilise couleurs.




    ps : d'autre part évite les casts C-style

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Par défaut
    Cette ligne correspond à un cast (c'est la fonction appelée par le clic de la souris dans la bibliothèque opencv).
    Je déclare le vector en statique dans le main mais j'envoie l'adresse lors de l'appelle à la fonction (la bibliothèque m'y oblige)
    mais mon programme fonctionnait parfaitement avant que j'ajoute les flux. donc je sais au moins que le probleme ne vient pas de là.

    question annexe : Pour le cast C++-style, comment ferais tu ?
    comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<couleur> *couleurs = reinterpret_cast< vector<couleur> * > (param);

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Quel est le problème? Qu'est ce qui ne fonctionne pas correctement ? Sois plus précis.

    Au passage, un void* c'est horrible... Mais tu sembles ne pas avoir le choix. Dans ce cas, ton cast C++ est plus indiqué en effet!

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Par défaut
    Ok je vais m'expliquer plus clairement

    En faite j'ai une structure qui correspond à une couleur et un flux vers un fichier dans lequel je souhaiterais enregistrer les coordonnées du barycentre de cette couleur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct couleur
    {
        int rouge, vert, bleu;
        ofstream file;
    };
    La fonction add_point crée une couleur rvb et son flux de sortie vers le fichier associé et l'ajoute au vector; cependant le programme m'indique des erreurs à la ligne de la création du flux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Ouverture du fichier
    colorTemp.file.open(nameFile.c_str(), ios::out | ios::trunc);
    // Si on a réussit à créer le fichier
    if (colorTemp.file) {
        // Ajout de la couleur au vector
        couleurs->push_back(colorTemp);
    }
    Je pense que j'accède mal au flux inclu dans le vector, mais j'ai a peu pres tout essayé mais impossible de trouver une solution.

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par erasor Voir le message
    cependant le programme m'indique des erreurs à la ligne de la création du flux :
    Euh, c'est pas très précis ça... Erreur de compilation ? Dans ce cas montrer ce que dit le compilo!
    Erreur à l'éxécution? Que dit le débogeur? Inspection des variables ?

Discussions similaires

  1. utiliser les interfaces dans un vector
    Par isoman dans le forum Général Java
    Réponses: 3
    Dernier message: 28/11/2009, 15h37
  2. Utiliser une classe personnelle dans un vector
    Par Mindiell dans le forum SL & STL
    Réponses: 16
    Dernier message: 01/03/2007, 17h42
  3. utiliser le même fichier dans plusieurs projets vc++6
    Par yannick_sch dans le forum MFC
    Réponses: 5
    Dernier message: 12/02/2004, 17h39
  4. Utilisation de l'unicode dans un algo de cryptage
    Par Zazeglu dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 28/10/2003, 14h38
  5. Réponses: 2
    Dernier message: 24/06/2003, 20h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo