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

C++ Discussion :

Header & Include


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 59
    Points
    59
    Par défaut Header & Include
    Bonjour,

    J'essaie de créer un fichier header pour gérer mes fonctions correctement

    J'ai lu sur internet deux conseils : "Eviter à tout prix les includes dans le .h" et "Mettre les includes .... là où il y en a besoin"

    Voici ma fonction principale :

    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
    # include "cv.h"
    # include "highgui.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
    #include "fonctions.h"
    using namespace cv;
     
    int main()
    {
     
    		 std::vector<Mat> frames;
     
    		frames=Buffer("C:\\Documents and Settings\\SY_R\\red_car_video.avi");
     
    		imshow("image:",frames[0]);
     
    		imshow("image2:",frames[20]);
     
    		cvWaitKey (0);
            return 0;
    }
    mon fichier fonctions :
    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
     
    #include "fonctions.h"
    # include "cv.h"
    # include "highgui.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
    using namespace cv;
     
    std::vector<Mat> Buffer(String URL)
    {
     
    	   VideoCapture capture;
     
    		capture.open(URL);
     
    		  std::vector<Mat> v;
    		  Mat frames;
     
    		 for (int i = 0; i < 50; i++)
    			{
     
    				capture>>frames;
    				v.push_back (frames);
    			}
     
    		return v;
    }
    et mon header :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <vector>
    #include <stdio.h>
    #include <stdlib.h>
     
    std::vector<Mat> Buffer(String URL);
    J'ai mis des bibliothèques dans le header pour gérer le String et le vector


    Mis bout à bout ces morceaux de code fonctionnaient très bien !

    Et en les séparant j'obtiens beaucoup d'erreur :

    1>c:\documents and settings\sy_r\mes documents\visual studio 2010\projects\open_cv\open_cv\fonctions.h(5): error C2065: 'Mat'*: identificateur non déclaré
    1>c:\documents and settings\sy_r\mes documents\visual studio 2010\projects\open_cv\open_cv\fonctions.h(5): error C2065: 'String'*: identificateur non déclaré
    1>c:\documents and settings\sy_r\mes documents\visual studio 2010\projects\open_cv\open_cv\fonctions.h(5): error C2146: erreur de syntaxe*: absence de ')' avant l'identificateur 'URL'
    ..... ..... ... .. .. .... . .. . ..


    J'imagine que j'ai mal utilisé les includes...

    De plus je sais qu'on peut utiliser des balises #ifdefine ... mais je ne me souviens plus du tout comment on fait .

    Si vous avez quelques conseils concernant ces sujets, merci!

    Cordialement,

    Ronan

  2. #2
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Merci beaucoup, il y a pas mal de choses intéressantes notamment ici : http://cpp.developpez.com/faq/cpp/?p...ASS_definition

    En créant des classes au lieu de fonction j'ai moins d'erreur, néanmoins avec le code suivant j'ai toujours une erreur :

    1> essai1.cpp
    1>c:\documents and settings\sy_r\mes documents\visual studio 2010\projects\open_cv\open_cv\essai1.cpp(16): error C2440: '<function-style-cast>'*: impossible de convertir de 'const char [49]' en 'MaClasse'
    1> Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë
    1> MaClasse.cpp

    Mon main.c++

    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
    # include "cv.h"
    # include "highgui.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
    #include "MaClasse.h"
    using namespace cv;
     
    int main()
    {
     
    		 std::vector<Mat> frames;
     
    		frames=MaClasse("C:\\Documents and Settings\\SY_R\\red_car_video.avi");
     
    		imshow("image:",frames[0]);
     
    		imshow("image2:",frames[20]);
     
    		cvWaitKey (0);
            return 0;
    }
    maclasse.c++

    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
    # include "cv.h"
    # include "highgui.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
    #include "MaClasse.h"
    using namespace cv;
     
     
    std::vector<Mat> MaClasse::Fonction(String URL)
    {
     
     
    	   VideoCapture capture;
     
    		capture.open(URL);
     
    		  std::vector<Mat> v;
    		  Mat frames;
     
    		 for (int i = 0; i < 50; i++)
    			{
     
    				capture>>frames;
    				v.push_back (frames);
    			}
     
    		return v;
     
    }

    maclasse.h

    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
    #ifndef MACLASSE_H
    #define MACLASSE_H
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
    #include "MaClasse.h"
    using namespace cv;
     
    class MaClasse
    {
    public:
        std::vector<Mat> Fonction(String URL);
    };
     
    #endif

  4. #4
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    D’où vient ta class String ? D’opencv ?

    En C++, les chaînes de caractères qui sont directement dans le code ne sont pas des objets, ce sont des tableaux de caractères (héritage du C), de type « const char * ». Le compilateur te dit qu’il ne peut pas convertir un const char* en String, probablement parce que le constructeur est explicite.

    Essaie, dans ton main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String url = "C:\\Documents and Settings\\SY_R\\red_car_video.avi";
    frames=MaClasse(url);
    Qui devrait fonctionner je pense. Sinon, il faut regarder la doc de la class String pour voir comment l’initialiser à partir d’un const char *.

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    ok merci

    mais il me semblait que la classe String était bien une classe c++

    http://fr.wikibooks.org/wiki/Program..._classe_string

    Etrangement cela ne m'a pas posé de problème avant de séparer mon code en classe ...

    En utilisant tes deux lignes de code et en ajoutant un include"string" j'obtiens :

    1>c:\documents and settings\sy_r\mes documents\visual studio 2010\projects\open_cv\open_cv\essai1.cpp(19): error C2440: '<function-style-cast>'*: impossible de convertir de 'std::string' en 'MaClasse'

    Je vais dessus pour voir...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La classe (std::)string oui, mais pas String.
    Mais étant donné que l'on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    namespace cv {
        typedef std::string String;
    }
    dans le code d'OpenCV, cela revient au final au même

    L'erreur est plutôt liée au fait que MaClasse ... est une classe !
    On ne peut donc pas utiliser sa méthode Fonction() comme tu le fais.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Maclasse instance;
    frames = instance.Fonction("C:\\Documents and Settings\\SY_R\\red_car_video.avi");
    À moins que tu en fasses une fonction static :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frames = MaClasse::Fonction("C:\\Documents and Settings\\SY_R\\red_car_video.avi");
    Remarque : on préfèrera réserver l'espace avant la boucle for pour éviter des copies inutiles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Mat frames;
    frames.reserve(50);
    for (int i = 0; i < 50; i++)
        ...
    Dernière modification par Invité ; 24/03/2014 à 11h41.

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Merci beaucoup ! cela fonctionne.

    Je vais potasser l'instanciation pour comprendre tout ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. variable session dans header en include
    Par hpl76 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 16/09/2008, 14h44
  2. headers et include
    Par WagaSeb dans le forum Langage
    Réponses: 8
    Dernier message: 15/06/2007, 17h01
  3. Réponses: 2
    Dernier message: 23/03/2006, 15h10
  4. Réponses: 2
    Dernier message: 07/03/2006, 01h53
  5. [compil] #include <header> ou #include <head
    Par guejo dans le forum MFC
    Réponses: 5
    Dernier message: 02/06/2004, 15h31

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