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 :

does not give a valid preprocessing token


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 91
    Par défaut does not give a valid preprocessing token
    Bnojour a tous,

    Je sais qu'il y a pleins de sujets la dessus mais je l'ai ai lu et j'ai essayé d'appliquer les reponses qui ont resolu les problemes des autres mais pas le mien

    Voila je suis sous Debian et programme sous eclipse avec g++

    erreur du compimlateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ../CKClassification.cpp:78:1: error: pasting "CKCLassification" and "::" does not give a valid preprocessing token
    ../CKClassification.cpp:78:1: error: pasting "::" and "name" does not give a valid preprocessing token
    ../CKClassification.cpp:78:1: error: pasting "CKCLassification" and "::" does not give a valid preprocessing token
    ../CKClassification.cpp:78:1: error: pasting "::" and "set" does not give a valid preprocessing token
    ../CKClassification.cpp:83:1: error: pasting "CKCLassification" and "::" does not give a valid preprocessing token
    ../CKClassification.cpp:83:1: error: pasting "::" and "parent" does not give a valid preprocessing token
    ../CKClassification.cpp:83:1: error: pasting "CKCLassification" and "::" does not give a valid preprocessing token
    ../CKClassification.cpp:83:1: error: pasting "::" and "set" does not give a valid preprocessing token
    ../CKClassification.cpp:84:1: error: pasting "CKCLassification" and "::" does not give a valid preprocessing token
    ../CKClassification.cpp:84:1: error: pasting "::" and "subClassifications" does not give a valid preprocessing token
    ../CKClassification.cpp:84:1: error: pasting "CKCLassification" and "::" does not give a valid preprocessing token
    ../CKClassification.cpp:84:1: error: pasting "::" and "get" does not give a valid preprocessing token
    et voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /*--- Attributs - Main --------------------------------------------------------------------------*/
     
    __FIELD_PRIMITIVE_DEFINITION(CKCLassification,  engr::wstring,   name,            Name); // ligne 78
     
     
    /*--- Attributs - Sub-classifications -----------------------------------------------------------*/
     
    __FIELD_COMPOSITE_ADRESS_DEFINITION(CKCLassification,   CKCLassification,   parent,               Parent); // ligne 83
    __FIELD_VECTOR_COMPOSITE_DEFINITION(CKCLassification, CKCLassification,   subClassifications,   SubClassifications); //ligne 84
    Et voila la definition de la maccro:
    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
     
    #define __FIELD_PRIMITIVE_DECLARATION(TYPE, NAME, FUNCTION_NAME)                   \
    protected:                                                                         \
    	TYPE _##NAME;                                                                  \
    public:                                                                            \
    	TYPE NAME() const;                                                             \
    	void set##FUNCTION_NAME(const TYPE NAME);                                      \
     
    #define __FIELD_PRIMITIVE_DEFINITION(CLASS, TYPE, NAME, FUNCTION_NAME) 	engr::#TYPE	\
    	TYPE CLASS##::##NAME() const                                                   \
    	{                                                                              \
    		return this->_##NAME;                                                      \
    	}                                                                              \
                                                                                       \
    	void  CLASS##::##set##FUNCTION_NAME(const TYPE NAME)                           \
    	{                                                                              \
    		this->_##NAME = NAME;                                                      \
    	}                                                                              \
     
     
     
     
    #define __FIELD_COMPOSITE_ADRESS_DECLARATION(TYPE, NAME, FUNCTION_NAME)            \
    protected:                                                                         \
    	engr::TKPointer< TYPE > _##NAME;                                               \
    public:                                                                            \
    	engr::TKPointer< TYPE > NAME() const;                                          \
    	void set##FUNCTION_NAME(const engr::TKPointer< TYPE > NAME);                   \
     
    #define __FIELD_COMPOSITE_ADRESS_DEFINITION(CLASS, TYPE, NAME, FUNCTION_NAME)      \
    	engr::TKPointer< TYPE > CLASS##::##NAME() const                                \
    	{                                                                              \
    		return this->_##NAME;                                                      \
    	}                                                                              \
                                                                                       \
    	void  CLASS##::##set##FUNCTION_NAME(const engr::TKPointer< TYPE > NAME)        \
    	{                                                                              \
    		this->_##NAME = NAME;                                                      \
    	}                                                                              \
     
    #define __FIELD_VECTOR_COMPOSITE_DECLARATION(TYPE, NAME, FUNCTION_NAME)            \
    protected:                                                                         \
    	engr::vector< TYPE > _##NAME;                                                  \
    public:                                                                            \
    	const engr::vector< TYPE >& NAME() const;                                      \
    	engr::vector< TYPE >& get##FUNCTION_NAME();                                    \
     
    #define __FIELD_VECTOR_COMPOSITE_DEFINITION(CLASS, TYPE, NAME, FUNCTION_NAME)      \
    	const engr::vector< TYPE >& CLASS##::##NAME() const                            \
    	{                                                                              \
    		return this->_##NAME;                                                      \
    	}                                                                              \
                                                                                       \
    	engr::vector< TYPE >&  CLASS##::##get##FUNCTION_NAME()                         \
    	{                                                                              \
    		return this->_##NAME;                                                      \
    	}                                                                              \
     
     
    #endif
    J'espere que quelqu'un pourra m'eclairer car ca me permettrai de resoudre mon probleme et aussi de comprendre le principe des defines car jusqu'a la les defines se resumaient pour moi a : #define width 3

    Merci encore.

  2. #2
    Invité
    Invité(e)
    Par défaut
    salut,

    en fait ton problème vient de CLASS##::##NAME
    le ## c'est pour dire que tu veux concaténer des variables séparées par un token.
    Typiquement CLASS##letoken##NAME

    si CLASS vaut toto et NAME tata, alors tu auras concaténé
    totoletokentata

    Le problème c'est que letoken doit commencer par un caractère alphanumérique si je me souviens bien (et peut être uniquement ne contenir que des caractères alpha je sais plus).

    Donc les :: c'est pas bon.

    Par contre, tu peux simplement écrire
    CLASS::NAME ca devrait aller... :: faisant office de token quand tu utilises pas la directive de concaténation ##

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Qui est l'auteur de ce code ?

    Parce que moi ce que je vois c'est une sorte de template écrit avec des macros, c'est tout de même sale et ça mériterait d'être traité autrement, si le projet et le temps imparti le permettent.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/03/2011, 17h31
  2. [W3C] Pb document type does not allow element "BODY" here W3C validator
    Par megapacman dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 22/06/2006, 13h42
  3. does not give a valid preprocessing token
    Par vdumont dans le forum C++
    Réponses: 7
    Dernier message: 24/03/2006, 19h10
  4. [macros] "does not give a valid preprocessing token&quo
    Par Emmanuel Delahaye dans le forum C
    Réponses: 8
    Dernier message: 24/09/2004, 21h57
  5. ... does not give a valid preprocessing token
    Par fredoun dans le forum CORBA
    Réponses: 1
    Dernier message: 17/05/2004, 09h46

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