Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : static const dans une classe [ Divers / Débutant(e) ] (DMK04)

vendredi 4 janvier 2008 à 15:16:05 | static const dans une classe

DMK04

Bonjour à tous,

J'ai la classe suivante qui permet de manipuler des coordonnees :
  1. #ifndef COORDINATES_H
  2. #define COORDINATES_H

  3. #include <ostream>
  4.     using std::ostream;

  5. /**
  6.  * Classe Coordinates.
  7.  * Classe permettant de gerer des coordonnees.
  8.  */
  9. class Coordinates
  10. {
  11. private:
  12.     /** @var abscisse */
  13.     int x;
  14.     /** @var ordonnee */
  15.     int y;

  16. public:   
  17.     /** @var coordonnees au dessus */
  18.     static const Coordinates up(0,1);
  19.     /** @var coordonnees en dessous */
  20.     static const Coordinates down(0,-1);
  21.     /** @var coordonnees a droite */
  22.     static const Coordinates right(1,0);
  23.     /** @var coordonnees a gauche */
  24.     static const Coordinates left(-1,0);
  25.    
  26.     /** @var coordonnees au dessus a droite */
  27.     static const Coordinates up_right(up+right);
  28.     /** @var coordonnees au dessus a gauche */
  29.     static const Coordinates up_left(up+left);
  30.     /** @var coordonnees en dessous a droite */
  31.     static const Coordinates down_right(down+right);
  32.     /** @var coordonnees en dessous a gauche */
  33.     static const Coordinates down_left(down+left);

  34.     /** @var tableau contenant les 8 directions */
  35.     static const Coordinates directions[8]={up, up_right, right, down_right, down, down_left, left, up_left};

  36.     /**
  37.      * Constructeur.
  38.      * @param x_ abscisse
  39.      * @param y_ ordonnee
  40.      */
  41.     Coordinates(int x_, int y_);
  42.     /**
  43.      * Constructeur de copie.
  44.      * @param rCoordinates reference sur l'objet Coordinates a copier
  45.      */
  46.     Coordinates(const Coordinates & rCoordinates);
  47.     /**
  48.      * Destructeur.
  49.      */
  50.     ~Coordinates();
  51.     /**
  52.      * Accesseur pour x.
  53.      * @return abscisse
  54.      */
  55.     int getX();
  56.     /**
  57.      * Accesseur pour y.
  58.      * @return ordonnee
  59.      */
  60.     int getY();
  61.     /**
  62.      * Mutateur pour x.
  63.      * @param x_ nouvelle abscisse
  64.      */
  65.     void setX(int x_);
  66.     /**
  67.      * Mutateur pour y.
  68.      * @param y_ nouvelle ordonnee
  69.      */
  70.     void setY(int y_);
  71.     /**
  72.      * Mutateur pour x et y.
  73.      * @param x_ nouvelle abscisse
  74.      * @param y_ nouvelle ordonnee
  75.      */
  76.     void setXY(int x_, int y_);
  77.     /**
  78.      * Surcharge de l'operateur d'affectation.
  79.      * @param rCoordinates reference sur les coordonnees a copier.
  80.      * @return reference sur la copie.
  81.      */
  82.     Coordinates& operator=(const Coordinates& rCoordinates);
  83.     /**
  84.      * Surcharge de l'operateur addition.
  85.      * @param rCoordinates reference sur les coordonnees a additionner avec les coordonnees courantes.
  86.      * @return addition des coordonnees.
  87.      */
  88.     Coordinates operator+(const Coordinates& rCoordinates) const;
  89.     /**
  90.      * Surcharge de l'operateur addition puis affectation.
  91.      * @param rCoordinates reference sur les coordonnees a ajouter aux coordonnees courantes.
  92.      * @return somme des coordonnees.
  93.      */
  94.     Coordinates& operator+=(const Coordinates& rCoordinates);
  95.     /**
  96.      * Surcharge de l'operateur addition puis affectation.
  97.      * @param rCoordinates reference sur les coordonnees a comparer aux coordonnees courantes.
  98.      * @return true si les coordonnees sont identiques, sinon false
  99.      */
  100.     bool operator==(const Coordinates& rCoordinates) const;
  101.     /**
  102.      * Surcharge de l'operateur addition puis affectation.
  103.      * @param rCoordinates reference sur les coordonnees a comparer aux coordonnees courantes.
  104.      * @return true si les coordonnees sont differentes, sinon false
  105.      */
  106.     bool operator!=(const Coordinates& rCoordinates) const;
  107.     /**
  108.      * Surcharge de l'operateur <<.
  109.      * @return flux sortant contenant les coordonnees.
  110.      */
  111.     friend ostream& operator<<(ostream& out, const Coordinates& rCoordinates);
  112. };

  113. ostream& operator<<(ostream& out,const Coordinates& rCoordinates);

  114. #endif
Mais lorsque je compile :

Coordinates.h:21: erreur: expected identifier before numeric constant
Coordinates.h:21: erreur: expected «," or «..." before numeric constant
Coordinates.h:23: erreur: expected identifier before numeric constant
Coordinates.h:23: erreur: expected «," or «..." before numeric constant
Coordinates.h:25: erreur: expected identifier before numeric constant
Coordinates.h:25: erreur: expected «," or «..." before numeric constant
Coordinates.h:27: erreur: expected identifier before «-" token
Coordinates.h:27: erreur: expected «," or «..." before «-" token
Coordinates.h:30: erreur: «up" is not a type
Coordinates.h:30: erreur: expected «," or «..." before «+" token
Coordinates.h:32: erreur: «up" is not a type
Coordinates.h:32: erreur: expected «," or «..." before «+" token
Coordinates.h:34: erreur: «down" is not a type
Coordinates.h:34: erreur: expected «," or «..." before «+" token
Coordinates.h:36: erreur: «down" is not a type
Coordinates.h:36: erreur: expected «," or «..." before «+" token
Coordinates.h:39: erreur: a brace-enclosed initializer is not allowed here before «{" token
Coordinates.h:39: erreur: invalid in-class initialization of static data member of non-integral type «const Coordinates [8]"

Je voudrais utiliser up/down/right... de la manière suivante par exemple :
position += Coordonnees::up;

En mettant mon bloc de "static const" (lignes 20->39) après ma classe (ligne 120), ça compile mais up/down/right... ne font plus parti du namespace Coordonnees. Je peux donc les utiliser comme ça :
position += up;
mais je trouve que c'est beaucoup moins clair.

Est-ce quelqu'un aurait une solution ?

Merci d'avance.



vendredi 4 janvier 2008 à 17:12:01 | Re : static const dans une classe

luhtor

Réponse acceptée !
Tu peux pas initialiser les membres static en meme temps que leur déclaration:

Fichier .h:

class Coordinates
{
...
static const Coordinates up; // déclaration
...
};

Fichier .cpp:
const Coordinates Coordinates::up(0, 1); // implémentation

Ca règlera ton pb.

vendredi 4 janvier 2008 à 17:17:38 | Re : static const dans une classe

nickydaquick

Membre Club

Salut,

la raison pour laquelle le programme ne compile pas c'est que tu essaies de definir un bloc de memoire ayant les proprietes du'une classe avant meme que cettte classe ne soit creee. Par contre en utilisant un pointeur, ca passera.Exemple:

fichier .hpp
class Test
{
    public:
       Test();
       virtual~ Test();

    static const Test *m_staticTest;
    static long m_ref;
}
fichier .cpp
#include "Test.hpp"

const Test* Test::m_staticTest = new Test;
long Test::m_ref = 0;

Test::Test()
{
    ++m_ref;
}
Test::~Test()
{
    if(!--m_ref) delete m_staticTest;
}

J'espere avoir aide, Salut et Bonne annee 2008
je suis heureux de faire partie d'une grande famille ...!

vendredi 4 janvier 2008 à 17:29:29 | Re : static const dans une classe

luhtor

nickydaquick
Non, le pointeur n'est pas nécessaire. Le meme static déclarer de facon statique ne pose aucun problème ici. Le seul pb est qu'il initialise le membre static lors de sa déclaration.

vendredi 4 janvier 2008 à 19:02:36 | Re : static const dans une classe

DMK04

C'est exactement ce que je voulais, merci.
Je savais pas (ou j'avais oublié) que l'on ne pouvait pas initialiser un membre static lors de la déclaration.



Cette discussion est classé dans : erreur, up, const, coordonnees, coordinates


Répondre à ce message

Sujets en rapport avec ce message

char** vers const char** [ par vecchio56 ] J'ai une erreur assez bizarre, sous VC++ 7.1. Ca compile avec l'option /TC (compilo C), mais pas /TP (compilo C++): typedef struct _A {   int nElemen Erreur de LNK2001 [ par bikini42 ] Bonjour à tous,J'ai un souci qui me bloque totalement, il concerne une erreur de compilation LNK2001 : unresolved external symbol Je ne vois pas comme Quelle est cette erreur __w64 ? [ par themaste ] Bonjour à tous!Je suis en train de faire un programme, que j'avais fais sous dos avant.Puisque ca marchait, je l'ai repris pour faire une application problème avec une librairie [ par hrp ] Hello,je travaille avec Borland C++ Builder 6 et je tente d'utiliser les fonctions de librairie "WizPro.lib". A la compilation voici l'erreur:[Lieur E Erreur en ajoutant un .h dans un projet [ par mayti ] Bonjour, voilà j'ai un tout petit probléme...j'ai un download.h qui sert à downloader un fichier en utilisant winsock 2 , le code marche quand il est prob tableau de pointeurs [ par fred111111 ] ben voila , j'ai un petit souci pour un prog que je dois réaliser pour un cours. Il s'agit en fait d'un pendu, avec un dictionnaire contenu dans un fi Erreur dans mon projet [ par Gael31 ] Bonjour, j'ai un problème qui revient souvent quand je créé une  application avec l'api: LIBCD.lib(crt0.obj) : error LNK2001: unresolved external sym Mysql probleme de connexion [ par ours_aquatique ] Bonjour je compile avec devC++ sous XP et en utilisant "mysql-4.1.9-win32" , je cherche pour l'instant a creer une fonction console en C++ pour agir d Message d'erreur [ par goutbouyo ] Salut,Lorsque j'essai de copier du texte dans un fichier ça me met cette erreur : Debug ErrorProgram: ...............R6002-floating point not loadedLe Probleme de liaison [ par vez_from_hell ] bonjourj'ai un gros probleme de liaison dans mon programme et je ne sais pas comme la corriger.(Lieu Erreur) Unresolved external '__fastcall TForm1::F


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.