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 :

red�finition du type 'class'


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par d�faut red�finition du type 'class'
    Bonjour � vous,

    Me voila de nouveau sur le forum pour un petit soucis que je n'arrive pas � r�soudre et je sais que sa provient de la d�finition de la surcharge op�rateur<<, voici mon code:

    header2.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
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include <iostream>
    using namespace std;
     
    class Point3D
    {
    protected:
    	double x, y, z;
    public:
    	//Constructeur par defaut
    	Point3D() : x(0.0), y(0.0), z(0.0) {}
    	//Constructeur par 3 coordonnées
    	Point3D(double x, double y, double z) : x(x), y(y), z(z) {}
    	//Methode de comparaison
    	bool operator==(const Point3D&) const;
     
    	//Methode d'acces en lecture
    	double get_x() { return x; }
    	double get_y() { return y; }
    	double get_z() { return z; }
    };
     
    ostream& operator<<(ostream&, const Point3D&);
    Source2.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 "Header2.h"
     
    bool Point3D::operator==(const Point3D& autre) const
    {
    	return (x==autre.x) && (y==autre.y) && (z==autre.z);
    }
     
    ostream& operator<<(ostream& sortie, const Point3D& p)
    {
    	sortie << '( ' << p.get_x() << ", " << p.get_y() << ", " << p.get_z() << ' )';
    	return sortie;
    }
    main.cpp:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "Header2.h"
    #include "Source2.cpp"
     
    int main()
    {
    	Point3D p1(1.0, 3.5, -4.2);
    	system("pause");
    	return 0;
    }

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par d�faut
    Euh je vous rajoute mon message d'erreur lorsque je lance la compilation:

    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
    1>------ Début de la génération*: Projet*: Projet1, Configuration*: Debug Win32 ------
    1>  main.cpp
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\header2.h(5): error C2011: 'Point3D'*: redéfinition du type 'class'
    1>          c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\header2.h(5)*: voir la déclaration de 'Point3D'
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(3): error C2027: utilisation du type non défini 'Point3D'
    1>          c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\header2.h(5)*: voir la déclaration de 'Point3D'
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(4): error C2270: '=='*: modificateurs non autorisés sur les fonctions non membres
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(5): error C2065: 'x'*: identificateur non déclaré
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(5): error C2027: utilisation du type non défini 'Point3D'
    1>          c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\header2.h(5)*: voir la déclaration de 'Point3D'
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(5): error C2228: la partie gauche de '.x' doit avoir un class/struct/union
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(5): error C2065: 'y'*: identificateur non déclaré
    1>          c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\header2.h(5)*: voir la déclaration de 'Point3D'
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(5): error C2228: la partie gauche de '.y' doit avoir un class/struct/union
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(5): error C2065: 'z'*: identificateur non déclaré
    1>          c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\header2.h(5)*: voir la déclaration de 'Point3D'
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(5): error C2228: la partie gauche de '.z' doit avoir un class/struct/union
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(10): error C2027: utilisation du type non défini 'Point3D'
    1>          c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\header2.h(5)*: voir la déclaration de 'Point3D'
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(10): error C2228: la partie gauche de '.get_x' doit avoir un class/struct/union
    1>          c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\header2.h(5)*: voir la déclaration de 'Point3D'
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(10): error C2228: la partie gauche de '.get_y' doit avoir un class/struct/union
    1>          c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\header2.h(5)*: voir la déclaration de 'Point3D'
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(10): error C2228: la partie gauche de '.get_z' doit avoir un class/struct/union
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\main.cpp(6): error C2079: 'p1' utilise une class de 'Point3D' non défini
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\main.cpp(6): error C2078: initialiseurs trop nombreux
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\main.cpp(6): warning C4244: 'initialisation'*: conversion de 'double' en 'int', perte possible de données
    1>  Source2.cpp
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(10): error C2662: 'Point3D::get_x'*: impossible de convertir un pointeur 'this' de 'const Point3D' en 'Point3D &'
    1>          La conversion perd les qualificateurs
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(10): error C2662: 'Point3D::get_y'*: impossible de convertir un pointeur 'this' de 'const Point3D' en 'Point3D &'
    1>          La conversion perd les qualificateurs
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(10): error C2662: 'Point3D::get_z'*: impossible de convertir un pointeur 'this' de 'const Point3D' en 'Point3D &'
    1>          La conversion perd les qualificateurs
    1>  Génération de code en cours...
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

  3. #3
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    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 153
    Billets dans le blog
    4
    Par d�faut
    Depuis quand on inclut un .cpp ?

    http://cpp.developpez.com/faq/cpp/?p...un-fichier-cpp

    btw, tes getter gagneraient � �tre const
    une classe point g�n�ralement c'est un POD, un simple struct et tout public et basta
    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.

  4. #4
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2010
    Messages
    872
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par d�faut
    @Bousk: c'est tout � fait possible mais tr�s rarement utilis� (je n'ai vu �a qu'en C � vrai dire).

  5. #5
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    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 153
    Billets dans le blog
    4
    Par d�faut
    Rien ne l'emp�che, �a existe oui, en C++ aussi �videmment, on s'en sert d'optim de compil avec des "masterfiles" sur des gros projets.
    Sauf qu'ici on est en pr�sence d'un d�butant, et donc que c'est hors contexte et juste signe d'une erreur.
    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.

  6. #6
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2010
    Messages
    872
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par d�faut
    @Bousk: D�sol�, j'ai mal interpr�t� ta r�ponse. Je pensais que tu ne savais pas que cela �tait possible ou alors que c'�tait absolument interdit (fa�on de parler) de faire �a. Mais en effet, cela n'a rien � faire dans le code d'un d�butant.

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par d�faut
    Oui j'ai oubli� de pr�ciser que j'�tais d�butant
    Par contre Bousk je te remercie et si j'ai bien compris je dois juste rajouter un const devant mes getters? Si c'est c� la solution je l'ai d�ja essay� et sa n'a pas march�.

  8. #8
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Pas d'include de .cpp.
    Tous les .h doivent disposer d'un header guard. http://fr.wikipedia.org/wiki/Include_guard

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par d�faut
    Alors voila mes rectifications dans le header, apr�s avoir enlever l'inclusion du .cpp dans le main:

    Header2.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
    23
    24
    25
    26
    27
    28
    29
     
     
    #include <iostream>
    #ifndef POINT3D_H
    #define POINT3D_H
     
    using namespace std;
     
    class Point3D
    {
    protected:
    	double x, y, z;
    public:
    	//Constructeur par defaut
    	Point3D() : x(0.0), y(0.0), z(0.0) {}
    	//Constructeur par 3 coordonnées
    	Point3D(double x, double y, double z) : x(x), y(y), z(z) {}
    	//Methode de comparaison
    	bool operator==(const Point3D&) const;
     
    	//Methode d'acces en lecture
    	const double get_x() { return x; }
    	const double get_y() { return y; }
    	const double get_z() { return z; }
    };
     
    ostream& operator<<(ostream&, const Point3D&);
     
    #endif
    j'ai encore un message d'erreur et j'avoue �tre un peu dans les choux :

    1>------ D�but de la g�n�ration*: Projet*: Projet1, Configuration*: Debug Win32 ------
    1> main.cpp
    1> Source2.cpp
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(10): error C2662: 'Point3D::get_x'*: impossible de convertir un pointeur 'this' de 'const Point3D' en 'Point3D &'
    1> La conversion perd les qualificateurs
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(10): error C2662: 'Point3D::get_y'*: impossible de convertir un pointeur 'this' de 'const Point3D' en 'Point3D &'
    1> La conversion perd les qualificateurs
    1>c:\users\mr\documents\visual studio 2012\projects\projet1\projet1\source2.cpp(10): error C2662: 'Point3D::get_z'*: impossible de convertir un pointeur 'this' de 'const Point3D' en 'Point3D &'
    1> La conversion perd les qualificateurs
    1> G�n�ration de code en cours...
    ========== G�n�ration*: 0 a r�ussi, 1 a �chou�, 0 mis � jour, 0 a �t� ignor� ==========

  10. #10
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Le header guard, c'est avant les includes.
    Pas d'using namespace dans les headers.

    Et maintenant, vous devez :
    btw, tes getter gagneraient � �tre const
    Vos getters DOIVENT �tre const.
    Par contre Bousk je te remercie et si j'ai bien compris je dois juste rajouter un const devant mes getters
    Non, c'est apr�s la liste des param�tres.
    Comme dans votre operateur "==" de votre classe.

  11. #11
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    const s'applique au premier type � gauche, ou, � d�faut, au premier � droite.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    class Clas {
    public:
        const double get_x();
    };
    Dans ce code, c'est double qui est const, donc la valeur de retour de la fonction. Ce qui n'est pas int�ressant, vue que c'est une copie (d'un type primitif).

    Pour rendre la fonction constante, c'est la () qui doit �tre const�.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    class Clas {
    public:
        double get_x() const;
    };
    Seules les fonctions membres constantes peuvent �tre appel�e sur un objet constant.
    Elles ne pourront pas modifier l'objet (sauf les �ventuelles variables mutable)

Discussions similaires

  1. R�ponses: 3
    Dernier message: 30/04/2009, 10h39
  2. red�finition du type 'class'
    Par Seb33300 dans le forum VC++ .NET
    R�ponses: 1
    Dernier message: 27/04/2007, 12h14
  3. Parametre de type class
    Par mzibri dans le forum AWT/Swing
    R�ponses: 10
    Dernier message: 05/06/2006, 21h34
  4. R�ponses: 2
    Dernier message: 09/05/2006, 12h30
  5. [Débutant][Conception] Mettre à jour un objet de type classe
    Par Sylvester dans le forum G�n�ral Java
    R�ponses: 19
    Dernier message: 09/02/2006, 17h59

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