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

Visual C++ Discussion :

struct type redefinition avec VS 2005


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Par défaut struct type redefinition avec VS 2005
    Bonjour,

    J'essaye de compiler mon projet avec VS 2005. Malheuresement, VS 2005 n'aime pas mon projet (plutot j'ai fait une connerie) .

    L'erreur :
    error C2011: 'IFont' : 'struct' type redefinition

    Si j'ai bien compris qu'il y a 2 definition de mon class (ou struct) IFont, mais je n'arrive pas a comprendre d'ou vient la deuxieme definition et comment la resoudre ,surtout que mon projet etais developper avec VS 2003 est ca compilé tres bien ( NO ERRORS AVEC VS 2003).

    Voici le fichier source de l'erreur :

    1. header file :
    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
    50
    51
     
    #pragma once
    #include <afxwin.h> // MFC core and standard components
    #include <afxtempl.h>
     
     
    	class IFont
    	{
    	public:
     
    		/*IFont(const char*, const char*, const char*);
    		IFont(const char*, const char*, int);*/
    		IFont();
    		~IFont();
    		float Height();
    		float Baseline();
    		float Width(const char* s, int length);
    		void Extents(const char* s,int i, Text_Extent* e);
    	};
     
     
    template <class T>
    	class MapIPaint {
     
    	protected:
    		// void Init(const char*);
    		// void DefineEntries(const char*);
    		// void DefineInitial(const char*);
    		// T* CreateEntry(const char*);
     
    		int initial;		// denotes which entry is used on startup
    		CArray<T*> m_ptArray;
    		int m_current;
     
    	public:
    		T* FindOrAppend(const CString& str);
    		T* FindOrAppend(unsigned char r, unsigned char g, unsigned char b);
    		T* FindOrAppend(bool none, int p, float w, int l, int r, int z=false);
    		INT_PTR Size() const;
    		bool AtEnd();
    		T* First();
    		T* Last();
    		T* Prev();
    		T* Next();
    		int GetCurrentIndex();
    		T* GetCur();
    		T* Index(int index) const;
    		int Find(const T* obj) const;
    		void setInitial(int i);
    		T* GetInitial();
    	};
    2. cpp file
    [
    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 <stdio.h>
    #include "mapipaint.h"
     
    /////////////////////// IFont ///////////////////////
    // j'ai pas donné l'implementation ,parceque je suis certains que ca ne vient pas d'ici
     
    IFont::IFont() {} 
    IFont::~IFont() {}
    float IFont::Height() {
    	return 0.0;
    }
    float IFont::Baseline() {
    	return 0.0;
    }
    float IFont::Width(const char* s, int length) {
    	return 0.0;
    }
     
    void IFont::Extents(const char* s , int i , Text_Extent* e) {}
     
    // bien sur ici il y a la definition de class template

    Comme je l'avais dis , il compile bien avec VS 2003.

    quelqu'un aurra une idée ?

    Merci en avance

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Essayer d'utiliser les garde d'inclusions : #ifndef, #define, #endif tel que dans :
    http://c.developpez.com/faq/cpp/inde...ASS_header_cpp

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Par défaut
    Citation Envoyé par Alp
    Essayer d'utiliser les garde d'inclusions : #ifndef, #define, #endif tel que dans :
    http://c.developpez.com/faq/cpp/inde...ASS_header_cpp
    En fait je crois que le probleme vient de ces deux includes :
    #include <afxwin.h> // MFC core and standard components
    #include <afxtempl.h>

    et puis comme je l'avais dis , ca compile avec VS 2003 donc ce n'est pas un probleme d'inclusion multiple des fichiers header. Mais il y a vraiment une nouveaute dont la class IFont !!

  4. #4
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    il est clair qu'il faut toujours mettre des #ifdef....

    ca devient donc
    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
    50
    51
    52
    #ifndef __CLASS_IFRONT__
    #define __CLASS_IFRONT__
    #include <afxwin.h> // MFC core and standard components
    #include <afxtempl.h>
     
     
    	class IFont
    	{
    	public:
     
    		/*IFont(const char*, const char*, const char*);
    		IFont(const char*, const char*, int);*/
    		IFont();
    		~IFont();
    		float Height();
    		float Baseline();
    		float Width(const char* s, int length);
    		void Extents(const char* s,int i, Text_Extent* e);
    	};
     
     
    template <class T>
    	class MapIPaint {
     
    	protected:
    		// void Init(const char*);
    		// void DefineEntries(const char*);
    		// void DefineInitial(const char*);
    		// T* CreateEntry(const char*);
     
    		int initial;		// denotes which entry is used on startup
    		CArray<T*> m_ptArray;
    		int m_current;
     
    	public:
    		T* FindOrAppend(const CString& str);
    		T* FindOrAppend(unsigned char r, unsigned char g, unsigned char b);
    		T* FindOrAppend(bool none, int p, float w, int l, int r, int z=false);
    		INT_PTR Size() const;
    		bool AtEnd();
    		T* First();
    		T* Last();
    		T* Prev();
    		T* Next();
    		int GetCurrentIndex();
    		T* GetCur();
    		T* Index(int index) const;
    		int Find(const T* obj) const;
    		void setInitial(int i);
    		T* GetInitial();
    	};
     #endif
    Pour ce qui est de la class IFont, verifie dans tes headers qu'il ne manque pas une directive de compilation dans le meme principe #ifdef... mais normalement l'ensemble de ces fichiers utilisent cette logique...

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Par défaut
    Citation Envoyé par rikau2
    il est clair qu'il faut toujours mettre des #ifdef....

    ca devient donc
    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
    50
    51
    52
    53
    #ifndef __CLASS_IFRONT__
    #define __CLASS_IFRONT__
    #pragma once
    #include <afxwin.h> // MFC core and standard components
    #include <afxtempl.h>
     
     
    	class IFont
    	{
    	public:
     
    		/*IFont(const char*, const char*, const char*);
    		IFont(const char*, const char*, int);*/
    		IFont();
    		~IFont();
    		float Height();
    		float Baseline();
    		float Width(const char* s, int length);
    		void Extents(const char* s,int i, Text_Extent* e);
    	};
     
     
    template <class T>
    	class MapIPaint {
     
    	protected:
    		// void Init(const char*);
    		// void DefineEntries(const char*);
    		// void DefineInitial(const char*);
    		// T* CreateEntry(const char*);
     
    		int initial;		// denotes which entry is used on startup
    		CArray<T*> m_ptArray;
    		int m_current;
     
    	public:
    		T* FindOrAppend(const CString& str);
    		T* FindOrAppend(unsigned char r, unsigned char g, unsigned char b);
    		T* FindOrAppend(bool none, int p, float w, int l, int r, int z=false);
    		INT_PTR Size() const;
    		bool AtEnd();
    		T* First();
    		T* Last();
    		T* Prev();
    		T* Next();
    		int GetCurrentIndex();
    		T* GetCur();
    		T* Index(int index) const;
    		int Find(const T* obj) const;
    		void setInitial(int i);
    		T* GetInitial();
    	};
     #endif
    Pour ce qui est de la class IFont, verifie dans tes headers qu'il ne manque pas une directive de compilation dans le meme principe #ifdef... mais normalement l'ensemble de ces fichiers utilisent cette logique...
    Quand on utilise ca suffirra pour eviter les problemes d'inclusion

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    De plus #pragma once n'est pas du tout standard et ne marche pas sur un bon nombre de compilateurs.

    Les gardes d'inclusions (#ifndef & compagnie) marchent à tous les coups, eux.

    Tu es sur que ce n'est pas ça la cause de ton problème de compilation ?
    Desfois que VS2003 ait des habitudes bizarres ...

Discussions similaires

  1. Réponses: 21
    Dernier message: 16/09/2013, 22h00
  2. Réponses: 2
    Dernier message: 25/03/2009, 10h51
  3. type complex avec Visual C++ 2005
    Par plessis dans le forum Visual C++
    Réponses: 2
    Dernier message: 02/05/2007, 14h21
  4. [LG]Type chaine avec plus de 255 car et EOF intempestif.
    Par jpclabaux dans le forum Langage
    Réponses: 2
    Dernier message: 27/10/2004, 10h39
  5. Type pour données de type email avec @
    Par jeff37 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/01/2004, 14h50

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