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 :

Structure cmake en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2016
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2016
    Messages : 60
    Par défaut Structure cmake en c++
    Bonjour tout le monde,
    depuis plus de deux heures je n'arrive pas à trouver l'erreur qui empêche mon programme de compiler. Je tente pour la première fois de structurer mon programme avec cmake mais c'a pas l'air de bien réussir même si cela peut paraitre simple , mais je souhaite vivement vos aides. Je mets le code et âpres l'erreur:

    le fichier CMakeLists.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CMAKE_MINIMUM_REQUIRED(VERSION 3.0)
    if(NOT WIN32)
    	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    ENDIF()
    ADD_EXECUTABLE(tp1
    src/main.cpp
    src/stocker.cpp
    src/stocker.h
    src/produits.h
    src/produits.cpp
    )
    les fichiers.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
    17
    18
    19
    20
    21
    22
    #ifndef PRODUITS_H
    #define PRODUITS_H
     
    #include <iostream>
    #include <string>
    #include "stocker.h"
     
    using namespace std
     
    class Produits
    {
    private: 
    	int ref;
    	string designation;
    public:
    	Produits(int ref, string desig);
    	~Produits();
    	void affiche();
     
    };
     
    #endif
    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
    #ifndef STOCKAGE_H
    #define STOCKAGE_H
     
    #include <string>
    #include "produit.h"
    #include <vector>
     
    using namespace std;
     
    	class Stockage 
    	{
    	private:	
    		int num;
    		vector<Produits*> vProd;
    		string type;
     
    	public:
    		Stockage(int num,string type);
    		~Stockage();
    		void ajouterProduit(Produit*);
    		void afficheTout();	
    	};
     
    #endif
    le premier étant le fichier produits.h et le second le fichier stocker.h
    Ensuite les fichiers .cpp

    stocker.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "stocker.h"
    #include <iostream>
    #include<string>
    using namespace std;
     
    Stockage::Stockage(int num,string type){
    	this->num=num;
    	this->type=type;
    }
    produits.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <iostream>
    #include "produits.h"
    #include "stockage.h"
     
    using namespace  std;
     
    Produits::Produits(int ref, string desc){
    	ref=ref;
    	designation=desc;
    }
     
    Produits::affiche(){
    	cout<<"Ref:"<<ref<<"  designation:"<<designation<<endl;
    }
    et en fin le main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream>
    #include "produits.h"
    #include "stocker.h"
     
    using namespace std;
     
    int main(int argc, char* argv[]){
    	Stockage s(1,"viande");
    	Produits pf1(1,"pf1");
     
    	//pf1.affichage();
    }
    Et mon produit, il me dit que les types Produits et Stockage n'existent pas
    je met une capture de mon écran quand je compile

    Nom : cap.png
Affichages : 190
Taille : 171,0 Ko et je precise que mes fichiers sont bien structurer.
    merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut, rien à voir avec CMake : tu as produit qui inclut stocker, qui inclut produit, qui inclut stocker, qui ....

    https://cpp.developpez.com/faq/cpp/?...-une-a-l-autre
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2016
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2016
    Messages : 60
    Par défaut
    Merci Bousk pour la reponse, je m'en etais rendu compte et j'ai géré l'inclusion multiple avec les template... mais un autre problème on me dit ceci

    principal.cpp: In function ‘int main(int, char**)’:
    principal.cpp:8:12: error: variable ‘Stockage s’ has initializer but incomplete type
      Stockage s(1,"viande");
                ^
    principal.cpp:9:12: error: variable ‘Produits p’ has initializer but incomplete type
      Produits p(1,"pf1");
    lorsque j'essaie d'instancier mes classe. Je me demande ce qui manque à mes constructeurs qui sont définis dans mes fichier .cpp

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CMAKE_MINIMUM_REQUIRED(VERSION 3.0)
    if(NOT WIN32)
    	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    ENDIF()
    ADD_EXECUTABLE(tp1
    src/main.cpp
    src/stocker.cpp
    src/stocker.h
    src/produits.h
    src/produits.cpp
    )
    Ce fichier pourrait grandement être amélioré.

    Déjà, pourquoi tester WIN32 ? Tu veux surtout tester que le compilateur est gcc (peut-être clang). Ton test devrait donc être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") ...
    Ensuite, il y a bien mieux pour choisir la version du standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        set(CMAKE_CXX_STANDARD 11) # on veut du C++ 11
        set(CMAKE_CXX_STANDARD_REQUIRED ON) # c'est obligatoire
    De plus, il manque quand même quelque de très important : il faut ajouter les options -Wall -Wextra !!!

    Enfin, le plus important, tu devrais autant que possible ne pas modifier directement les variables telles que CMAKE_CXX_FLAGS. Cette façon de faire est une vieille technique aujourd'hui considérée comme mauvaise. Regarde ce que du côté de add_compile_options(), c'est ce dont tu as besoin Voir https://stackoverflow.com/questions/...oject/46330404

    Au final, ton CMakeLists.txt devrait plutôt ressembler à ceci :
    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
    cmake_minimum_required(VERSION 3.0)
     
    project(mon tp)
     
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
     
    if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
        message("GNU GCC detected")
        add_compile_options(-Wall -Wextra)    
    endif ()
     
    ADD_EXECUTABLE(tp1
    src/main.cpp
    src/stocker.cpp
    src/stocker.h
    src/produits.h
    src/produits.cpp
    )

  5. #5
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2016
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2016
    Messages : 60
    Par défaut
    Merci beaucoup, ça y est c'est résolu.

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

Discussions similaires

  1. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  2. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  3. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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