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 :

espace de nom std non reconnu


Sujet :

C++

  1. #1
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut espace de nom std non reconnu
    Bonjour à tous et bonne année ,
    je programme une petite application en C++ sur VisualStudio 5.0
    dans laquelle je souhaite utiliser la classe "String" .
    Malheureusement le compilateur refuse catégoriquement de reconnaître
    le mot "string" bien que le fichier string.h soit inclus et malgré la directive
    "using namespace std;" ; pire , il m'annonce ne pas connaître l'espace de
    nom std ?!
    je vous livre le fichier d'en-tête :
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    #include <string.h>
    #include <iostream.h>
     
    #ifndef	CLASSES_H
    #define CLASSES_H
     
    using namespace std;
     
    class	OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *);
    };
     
    class	OBSERVATEURMETEO:public OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *);
    private :
    	int	valeurCapteur;
     
    	void AfficherConditions() {cout<<"Les conditions sont vraiment merdiques !"<<endl;}
    	void AfficherStats() {cout<<"On a pas eu le temps Alors un peu de patience "<<endl;}
    	void AfficherPrevisions() {cout<<"Il va faire beau ... avec un peu de pluie."<<endl;}
    };
    class	OBSERVATEURNEWS:public OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *);
    private :
    	string	article();
     
    	void AfficherArticle(string s) {cout<<article<<endl;}
    };
     
    class	SUJETS {
    public :
    	virtual	void InformerClients(void *);
    	//virtual void	Inscription();
    	//virtual void	Demission();
    };
     
    class	SUJETMETEO:public SUJETS {
    public :
    	SUJETMETEO() {nbClients = 0;}
     
    	virtual void InformerClients(void *);
    	void	Inscription(OBSERVATEURS *);
    	void	Demission(OBSERVATEURS *);
    private :
    	OBSERVATEURSMETEO *table[10];
    	int	nbClients;
    };
    class	SUJETNEWS:public SUJETS {
    public :
    	SUJETNEWS() {nbClients = 0;}
     
    	virtual void InformerClients(void *);
    	void	Inscription(OBSERVATEURS *);
    	void	Demission(OBSERVATEURS *);
    private :
    	OBSERVATEURSNEWS *table[10];
    	int	nbClients;
    };
     
    #endif

  2. #2
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonjour,
    <string.h> est le header C qui inclue les fonctions de traitement de chaines de caractères(strcat, strchr, strlen, etc...).

    Pour les string c'est <string>. et pour le bien il faut plutôt utiliser <iostream> pour les iostream (sans le .h)

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Visual Studio 5.0 prédate la sortie du standard de tant d'années que je ne suis pas sur que tu puisse y trouver les headers standards.

    Je te conseille de télécharger et d'installer une version récente (les versions dites "express" sont gratuites).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Pour les string c'est <string>. et pour le bien il faut plutôt utiliser <iostream> pour les iostream (sans le .h)
    Désolé nogane mais si je fais ce que tu dis (que j'ai déjà essayé) ça ne
    change absolument rien ...

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par exe2bin Voir le message
    Désolé nogane mais si je fais ce que tu dis (que j'ai déjà essayé) ça ne
    change absolument rien ...
    Je répète :

    Citation Envoyé par Emmanuel Deloget Voir le message
    Visual Studio 5.0 prédate la sortie du standard de tant d'années que je ne suis pas sur que tu puisse y trouver les headers standards.

    Je te conseille de télécharger et d'installer une version récente (les versions dites "express" sont gratuites).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  6. #6
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Je viens de telecharger VC 2008 edition express puis j'ai crée un nouveau projet ; avec un copier/coller j'ai reconstituer mes 2 fichiers mais la génération a été
    interrompue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1>.\Debug\pattern OBSERVATEUR.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. Le fichier spicifii est introuvable.
    C koi un manifest ??

  7. #7
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    re-bonjour , bon je laisse tomber la classe string et je reprend les char *
    mais maintenant c'est le linker qui ne reconnait pas mes fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall OBSERVATEURS::ArrivageDonnees(void *)" (?ArrivageDonnees@OBSERVATEURS@@UAEXPAX@Z)
    main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall SUJETS::InformerClients(void *)" (?InformerClients@SUJETS@@UAEXPAX@Z)
    Je pense que les fonctions virtuelles sont en cause pourtant elles sont
    déclarées !?
    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
    54
     
    class	OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *);
    };
     
    class	OBSERVATEURMETEO:public OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *);
    private :
    	int	valeurCapteur;
     
    	void AfficherConditions() {cout<<"Les conditions sont vraiment merdiques !"<<endl;}
    	void AfficherStats() {cout<<"On a pas eu le temps Alors un peu de patience "<<endl;}
    	void AfficherPrevisions() {cout<<"Il va faire beau ... avec un peu de pluie."<<endl;}
    };
    class	OBSERVATEURNEWS:public OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *);
    private :
    	char	*article;
     
    	void AfficherArticle(char *s) {cout<<s<<endl;}
    };
     
    class	SUJETS {
    public :
    	virtual	void InformerClients(void *);
    	//virtual void	Inscription();
    	//virtual void	Demission();
    };
     
    class	SUJETMETEO:public SUJETS {
    public :
    	SUJETMETEO() {nbClients = 0;}
     
    	virtual void InformerClients(void *);
    	void	Inscription(OBSERVATEURS *);
    	void	Demission(OBSERVATEURS *);
    private :
    	OBSERVATEURS *table[10];
    	int	nbClients;
    };
    class	SUJETNEWS:public SUJETS {
    public :
    	SUJETNEWS() {nbClients = 0;}
     
    	virtual void InformerClients(void *);
    	void	Inscription(OBSERVATEURS *);
    	void	Demission(OBSERVATEURS *);
    private :
    	OBSERVATEURS *table[10];
    	int	nbClients;
    };
    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
    54
    55
    56
     
    #include "classes.h"
     
    void SUJETMETEO::InformerClients(void *data) 
    {
    	for(int i=0;i<nbClients;i++) table[i]->ArrivageDonnees(data);
    }
    void	SUJETMETEO::Inscription(OBSERVATEURS *obs)
    {
    	if(nbClients<10) table[nbClients++] = obs;
    }
    void	SUJETMETEO::Demission(OBSERVATEURS *obs)
    {
    	for(int i=0;i<nbClients;i++) {
    		if(table[i] == obs)
    		{
    			table[i]=table[nbClients-1];// remplace le client par
    			table[nbClients-1]=0;	//le dernier arrivé
    			nbClients--;
    		}
    	}
    }
    //
    void SUJETNEWS::InformerClients(void *data) 
    {
    	for(int i=0;i<nbClients;i++) table[i]->ArrivageDonnees(data);
    }
    void	SUJETNEWS::Inscription(OBSERVATEURS *obs)
    {
    	if(nbClients<10) table[nbClients++] = obs;
    }
    void	SUJETNEWS::Demission(OBSERVATEURS *obs)
    {
    	for(int i=0;i<nbClients;i++) {
    		if(table[i] == obs)
    		{
    			table[i]=table[nbClients-1];// remplace le client par
    			table[nbClients-1]=0;	//le dernier arrivé
    			nbClients--;
    		}
    	}
    }
    void OBSERVATEURMETEO::ArrivageDonnees(void *data)
    {
    	int	*p_int = (int *) data;
    	valeurCapteur = *p_int; // déréférence le pointeur pour obtenir la valeur
    	cout<<"Valeur "<<valeurCapteur<<" captee"<<endl;
    	AfficherConditions();
    	AfficherPrevisions();
    	AfficherStats();
    }
    void OBSERVATEURNEWS::ArrivageDonnees(void *data)
    {
    	article = (char *) data;
    	AfficherArticle(article);
    }

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Par défaut
    Tes fonctions OBSERVATEURS::ArrivageDonnees et SUJETS::InformerClients ne sont ni définies, ni pures.

  9. #9
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Tes fonctions OBSERVATEURS::ArrivageDonnees et SUJETS::InformerClients ne sont ni définies, ni pures.
    Mais c'est bien pour ne pas avoir à les définir dans la classe de base
    quelles sont virtuelles sinon à quoi ça sert ?!

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    En ce cas, défini les pures (ajoute un =0 en bout de ligne).

    Autrement, tant qu'à changer de compilateur, autant prendre la version 2010 express, elle apporte un véritable confort à l'utilisation (sans même compiler, elle te souligne en rouge certaines erreurs dans le code, comme un vérificateur d'orthographe). Et n'abandonne pas les strings, tu le regretterais !
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  11. #11
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Merci à toi JolyLoic pour tes encouragements
    j'ai téléchargé codeblocks que je trouve très engageants ; malgré tout , le
    problème avec la classe string n'est pas résolu , pas plus que la reconnaissance des deux fonctions (OBSERVATEURS::ArrivageDonnees et SUJETS::InformerClients ) , même lorsque la classe devient virtuelle avec
    un =0 en bout de ligne .

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Par défaut
    Code à ajouter en rouge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class	OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *)=0;
    };
    J'utilise Code::Blocks et je n'ai aucun problème avec les strings.

  13. #13
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Je vous le dis ça ne change RIEN , le linker ne veut rien savoir !!

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Par défaut
    Tu as un exemple d'utilisation ? J'ai testé de compiler sous Code::Blocks et ça tourne...

  15. #15
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    je te mets le code.

    1)en-tête :

    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
    54
    55
    56
    57
    58
    59
    60
    61
     
    #include <iostream.h>
     
    #ifndef	CLASSES_H
    #define CLASSES_H
     
    class	OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *)=0;
    };
     
    class	OBSERVATEURMETEO:public OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *);
    private :
    	int	valeurCapteur;
     
    	void AfficherConditions() {cout<<"Les conditions sont vraiment merdiques !"<<endl;}
    	void AfficherStats() {cout<<"On a pas eu le temps Alors un peu de patience "<<endl;}
    	void AfficherPrevisions() {cout<<"Il va faire beau ... avec un peu de pluie."<<endl;}
    };
    class	OBSERVATEURNEWS:public OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *);
    private :
    	char	*article;
     
    	void AfficherArticle(char *s) {cout<<s<<endl;}
    };
     
    class	SUJETS {
    public :
    	virtual	void InformerClients(void *)=0;
    	//virtual void	Inscription();
    	//virtual void	Demission();
    };
     
    class	SUJETMETEO:public SUJETS {
    public :
    	SUJETMETEO() {nbClients = 0;}
     
    	virtual void InformerClients(void *);
    	void	Inscription(OBSERVATEURS *);
    	void	Demission(OBSERVATEURS *);
    private :
    	OBSERVATEURS *table[10];
    	int	nbClients;
    };
    class	SUJETNEWS:public SUJETS {
    public :
    	SUJETNEWS() {nbClients = 0;}
     
    	virtual void InformerClients(void *);
    	void	Inscription(OBSERVATEURS *);
    	void	Demission(OBSERVATEURS *);
    private :
    	OBSERVATEURS *table[10];
    	int	nbClients;
    };
     
    #endif
    2) source :

    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
    54
    55
    56
     
    #include "classes.h"
     
    void SUJETMETEO::InformerClients(void *data) 
    {
    	for(int i=0;i<nbClients;i++) table[i]->ArrivageDonnees(data);
    }
    void	SUJETMETEO::Inscription(OBSERVATEURS *obs)
    {
    	if(nbClients<10) table[nbClients++] = obs;
    }
    void	SUJETMETEO::Demission(OBSERVATEURS *obs)
    {
    	for(int i=0;i<nbClients;i++) {
    		if(table[i] == obs)
    		{
    			table[i]=table[nbClients-1];// remplace le client par
    			table[nbClients-1]=0;	//le dernier arrivé
    			nbClients--;
    		}
    	}
    }
    //
    void SUJETNEWS::InformerClients(void *data) 
    {
    	for(int i=0;i<nbClients;i++) table[i]->ArrivageDonnees(data);
    }
    void	SUJETNEWS::Inscription(OBSERVATEURS *obs)
    {
    	if(nbClients<10) table[nbClients++] = obs;
    }
    void	SUJETNEWS::Demission(OBSERVATEURS *obs)
    {
    	for(int i=0;i<nbClients;i++) {
    		if(table[i] == obs)
    		{
    			table[i]=table[nbClients-1];// remplace le client par
    			table[nbClients-1]=0;	//le dernier arrivé
    			nbClients--;
    		}
    	}
    }
    void OBSERVATEURMETEO::ArrivageDonnees(void *data)
    {
    	int	*p_int = (int *) data;
    	valeurCapteur = *p_int; // déréférence le pointeur pour obtenir la valeur
    	cout<<"Valeur "<<valeurCapteur<<" captee"<<endl;
    	AfficherConditions();
    	AfficherPrevisions();
    	AfficherStats();
    }
    void OBSERVATEURNEWS::ArrivageDonnees(void *data)
    {
    	article = (char *) data;
    	AfficherArticle(article);
    }
    3) source test :

    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
     
    #include "classes.h"
     
    int main()
    {
    	// Instancie les sujets
    	SUJETMETEO	meteo;
    	SUJETNEWS	news;
     
    	OBSERVATEURS	client1,client2,client3; // arrivée des clients
     
    	meteo.Inscription(&client1);	// demande d'inscription à la météo
    	news.Inscription(&client2);		// demande d'inscription aux news
    	meteo.Inscription(&client3);news.Inscription(&client3);	// demande d'inscription aux 2
    	return 0;
    }
    fais des copier/coller et tiens moi au courant
    merci

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 36
    Par défaut
    On ne peut pas créer d'objets de classe abstraite, donc le code devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class	OBSERVATEURS {
    public :
    	virtual	void ArrivageDonnees(void *){};
    };
    Après çà, çà compile.

  17. #17
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    EXACT !!!!
    j'avais oublié ce (petit) détail


    Merci à toi

  18. #18
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par exe2bin Voir le message
    je te mets le code.
    Il n'y a pas de string dans ce code. Ce n'est donc certainement pas celui dans lequel les string te pose problème.

    En outre:
    • Il ne faut pas utiliser iostream.h mais iostream (déjà signalé dans un message précédent).
    • Pour utiliser des éléments du namespace standard, il faut spécifier ce namespace donc cout ==> std::cout et endl ==> std::endl.
    • Vu comme tu définis la classe OBSERVATEURS et la façon dont tu tentes de l'utiliser, il faut définir le destructeur virtuel (cf FAQ).
    • Les noms en majuscule sont, par convention, généralement réservés au macro.
    • Enfin, OBSERVATEURS est une classes abstraite, tu ne peux donc pas l'instancier comme tu le fais ici (cf FAQ). Il faut :
      • Soit la rendre concrète (c'est à dire que ArrivageDonnees ne doit pas être virtuelle pure et posséder une implémentation).
      • Soit en faire une utilisation polymorphique. Dans ce cas tu n'instancies pas des OBSERVATEURS mais tu manipules des pointeurs d'OBSERVATEURS qui pointent vers une classes dérivée concrète (OBSERVATEURS* client1 = new OBSERVATEURMETEO)

  19. #19
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Merci pour ces éclairages tant instructifs que limpides .
    (pour les "string" c trop compliqué , je préfère m'en tenir à ces bons vieux
    "char[]" ).

  20. #20
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par exe2bin Voir le message
    (pour les "string" c trop compliqué , je préfère m'en tenir à ces bons vieux "char[]" ).
    Opinion assez surprenante. Les string sont quand même plus simple à utiliser que les char[] (ne serait-ce que parce qu'elles masquent les problèmes de gestion mémoire).

    Sinon deux petites remarques par rapport à mon message précédent :
    • Il y a en fait une troisième possibilité qui est d'instancier une classe dérivée et de passer l'adresse de celle-ci à la fonction Inscription(). Ce qui, fonctionnellement, est similaire à la deuxième solution en étant bien plus simple
    • Vu ce que tu cherches visiblement à faire (DP observer, n'est-ce pas), l'objectif n'est probablement pas d'instancier une classe de base.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Espace de noms CLR non défini
    Par NTIC13 dans le forum Silverlight
    Réponses: 4
    Dernier message: 20/01/2011, 15h28
  2. Réponses: 2
    Dernier message: 18/08/2009, 12h08
  3. espace de nom non disponible
    Par Tommy57 dans le forum Framework .NET
    Réponses: 5
    Dernier message: 14/10/2008, 00h09
  4. [requete] Nom de colonne non reconnue
    Par OverOne dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/06/2008, 17h43
  5. [JSTL] [1.1] préfixe non limité à un espace de noms
    Par gufra dans le forum Taglibs
    Réponses: 6
    Dernier message: 25/10/2007, 22h52

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