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 :

question concernant l'extern


Sujet :

C++

  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut question concernant l'extern
    Bonjour

    Je voudrais savoir s'il est possible de faire un extern avec un type. Par exemple, il est possible de faire:

    obj1.cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char* f(){
    	return "eee";
    }
    obj2.cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    extern char* f();
    int main(int argc,char * argv[]){
       char* ggg=f();
    }

    Mais est-il possible de faire:

    obj1.cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class A{
    	private:
    		int AA;
    		int BB;
    	public:
    		A(int d1,int d2):AA(d1),BB(d2){};
    		int get_AA(){return AA;}
    };
    obj2.cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    extern class A d(3,2);// ou extern class A d;
     
    int main(int argc,char * argv[]){
       int j=d.get_AA();
    }
    Je n'ai pas l'impression que ce soit possible, car le compilateur me renvoie une erreur.

  2. #2
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Bonsoir,

    essaye ça, ça devrait compiler (je n'ai pas testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    extern A* d;
     
    int main(int argc,char * argv[]){
       d = new A(3,2);
       int j=d->get_AA();
    }

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Tu ne peux pas déclarer un type externe: tu ne peux déclarer que des variables.

    Mais tu peux déclarer n'importe quel type de variable externe, à ma connaissance sans le moindre problème.

    Le mot clé extern ne signifie, pour faire simple, qu'une seule chose: il indique au compilateur "ne t'en fait pas, ce que je déclare existe effectivement, tu n'aura qu'à laisser l'éditeur de lien chercher l'endroit où il se trouve précisément".

    Mais il est à ta charge de veiller à ce que la chose déclarée externe ne soit effectivement définie qu'en un seul endroit du code
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Aleph69
    >>ca plante

    Par ailleurs est-il possible de déclarer une fonction inline extern? :
    Je me suis posé cette question, et sans surprise, pb de link:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fichier1.cpp:
     
     
    inline char* f(){
    	return "eee";
    }

    fichier2.cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    extern inline char* f();
     
     
    int main(int argc,char * argv[]){
       char* ggg=f();
     }
    Pour moi, la raison est celle la:
    quand on déclare un objet extern, c'est l'adresse de cet objet qu'on transmet à l'autre .cpp.
    Mais si la fonction est inliné, elle sera incluse dans le code de la fonction cliente. On pourra donc pas transmettre son adresse, puisqu'elle en a pas.

    Ok?

  5. #5
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Bonjour,

    pour "extern inline" : http://www.glenmccl.com/ansi_015.htm

    pour "extern class", la syntaxe que je t'ai donnée n'est pas bonne.

    Par contre, chez moi, ces deux exemples de syntaxe compilent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    extern class Objet instance(/*arguments d'un constructeur de Objet*/);
    extern class Objet* instance = new Object(/*arguments d'un constructeur de Objet*/);
    Donc, le premier exemple que tu as toi-même donné devrait compiler.
    Quel message d'erreur obtiens-tu à la compilation?

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

Discussions similaires

  1. [Débutant] Deux questions concernants les vues
    Par 13obscur dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 19/04/2005, 14h29
  2. [Servlet + Class] question concernant plusieurs connections
    Par ShinJava dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 29/11/2004, 16h39
  3. Réponses: 7
    Dernier message: 10/09/2004, 14h28
  4. [Indy] Questions concernant l'envoi de mail
    Par delphicrous dans le forum Web & réseau
    Réponses: 3
    Dernier message: 24/06/2004, 15h06
  5. Question concernant l'API "WaitforSingleObject
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 29/03/2003, 07h26

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