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 :

Assocations en C++


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 41
    Points
    41
    Par défaut Assocations en C++
    Bonjour,

    Je suis loin d'étre un expert en C++ et j'aurais besoin d'une info simple.

    J'ai deux objets, "probleme" et "solution", un probleme possède plusieurs solution et une solution correspond à un problème. J'ai donc deux fichiers header que voici :

    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
     
    #pragma once 
    #include "Probleme.h"
    #include <vector>
    using namespace std;
     
     
     
    class Solution
    {
    private:
    	Probleme* probleme;
    	vector<Tache*> taches;
    	int fitness;
    public:   
    	Solution(void);
    	Solution(Probleme*);
    	~Solution(void);
    	Probleme* Solution::getProbleme();
    	void Solution::addTache(Tache*);
    	void Solution::setTaches(vector<Tache*>);
    	vector<Tache*> Solution::getTaches();
    	void Solution::calculFitness();
    	int Solution::getFitness();
    	void Solution::setFitness(int fitness);
    };
    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
     
    #pragma once
    #include "Solution.h"
    #include <vector>
    using namespace std;
     
    class Probleme
    {
    private:
    	vector<Tache*> taches;
    	int dateFin;
    	int nbTaches;
    	vector<Solution*> population;
    public:
    	Probleme(void);
    	Probleme(int);
    	~Probleme(void);
     
    	void Probleme::addSolution(Solution* solution);
    	void Probleme::trieElitiste(vector<Solution*>);
    	vector<Solution*> Probleme::selection();
    	Solution* Probleme::getBestSolution();
     
    	void Probleme::addTache(Tache*);
    	vector<Tache*> Probleme::getTaches();
     
    	void Probleme::setDateFin(int);
    	int Probleme::getDateFin();
     
    	void Probleme::setNbTaches(int);
    	int Probleme::getNbTaches();
    };
    Le compilateur m'affiche une erreur problement à cause du fait que j'inclus "probleme.h" dans "solution.h" mais également l'inverse.

    Voici une partie de l'erreur

    1>c:\users\dougui\workspace\c\projet ag\projet ag\solution.h(11) : error C2143: erreur de syntaxe*: absence de ';' avant '*'
    1>c:\users\dougui\workspace\c\projet ag\projet ag\solution.h(11) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\dougui\workspace\c\projet ag\projet ag\solution.h(11) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\dougui\workspace\c\projet ag\projet ag\solution.h(16) : error C2061: erreur de syntaxe*: identificateur 'Probleme'
    1>c:\users\dougui\workspace\c\projet ag\projet ag\solution.h(16) : error C2535: 'Solution::Solution(void)'*: fonction membre déjà définie ou déclarée
    1> c:\users\dougui\workspace\c\projet ag\projet ag\solution.h(15)*: voir la déclaration de 'Solution::Solution'
    1>c:\users\dougui\workspace\c\projet ag\projet ag\solution.h(18) : error C2143: erreur de syntaxe*: absence de ';' avant '*'
    1>c:\users\dougui\workspace\c\projet ag\projet ag\solution.h(18) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\dougui\workspace\c\projet ag\projet ag\solution.h(18) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>c:\users\dougui\workspace\c\projet ag\projet ag\solution.h(18) : warning C4183: 'getProbleme'*: type de retour manquant*; fonction membre retournant 'int' prise par défaut
    1>c:\users\dougui\workspace\c\projet ag\projet ag\main.cpp(11) : error C2664: 'Solution::Solution(const Solution &)'*: impossible de convertir le paramètre 1 de 'int *' en 'const Solution &'
    1> Raison*: impossible de convertir de 'int *' en 'const Solution'
    1> Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë
    1>c:\users\dougui\workspace\c\projet ag\projet ag\main.cpp(12) : warning C4018: '<'*: incompatibilité signed/unsigned
    1>c:\users\dougui\workspace\c\projet ag\projet ag\main.cpp(42) : warning C4244: 'argument'*: conversion de 'double' en 'int', perte possible de données
    1>c:\users\dougui\workspace\c\projet ag\projet ag\main.cpp(43) : error C2664: 'Solution::Solution(const Solution &)'*: impossible de convertir le paramètre 1 de 'Probleme *' en 'const Solution &'
    1> Raison*: impossible de convertir de 'Probleme *' en 'const Solution'
    1> Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë
    1>c:\users\dougui\workspace\c\projet ag\projet ag\main.cpp(49) : warning C4244: 'argument'*: conversion de 'double' en 'int', perte possible de données
    1>c:\users\dougui\workspace\c\projet ag\projet ag\main.cpp(49) : warning C4244: 'argument'*: conversion de 'double' en 'int', perte possible de données
    1>c:\users\dougui\workspace\c\projet ag\projet ag\main.cpp(49) : warning C4244: 'argument'*: conversion de 'double' en 'int', perte possible de données
    1>c:\users\dougui\workspace\c\projet ag\projet ag\main.cpp(53) : warning C4244: 'argument'*: conversion de 'double' en 'int', perte possible de données
    Que dois je faire pour régler ça?

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    problème 1000 fois évoqués dans les forums, dans les fichiers d'en-tête il faut remplacer les #include par une simple déclaration

    par exemple dans le fichier d'en-tête (.h) de Solution toutes les références à Probleme et Tache sont faites via des pointeurs, il est donc inutile de connaitre ces types et d'inclure leur définition => remplacer les #include par class Solution; et class Tache; (en supposant que Tache soit bien une classe)

    par contre dans les fichiers sources (.cpp) il faut bien-sûr mettre tout les #include nécessaires
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 41
    Points
    41
    Par défaut
    Merci beaucoup et désolé pour la question banale. En tout cas ça fonctionne.

Discussions similaires

  1. [MySQL] error de fetch-assoc
    Par spawntux dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 21/06/2007, 00h41
  2. Création d'une assocation
    Par soony dans le forum Association
    Réponses: 1
    Dernier message: 30/07/2006, 16h29

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