Bonjour à tous,
J'ai la classe suivante qui permet de manipuler des coordonnees :
- #ifndef COORDINATES_H
- #define COORDINATES_H
- #include <ostream>
- using std::ostream;
- /**
- * Classe Coordinates.
- * Classe permettant de gerer des coordonnees.
- */
- class Coordinates
- {
- private:
- /** @var abscisse */
- int x;
- /** @var ordonnee */
- int y;
- public:
- /** @var coordonnees au dessus */
- static const Coordinates up(0,1);
- /** @var coordonnees en dessous */
- static const Coordinates down(0,-1);
- /** @var coordonnees a droite */
- static const Coordinates right(1,0);
- /** @var coordonnees a gauche */
- static const Coordinates left(-1,0);
-
- /** @var coordonnees au dessus a droite */
- static const Coordinates up_right(up+right);
- /** @var coordonnees au dessus a gauche */
- static const Coordinates up_left(up+left);
- /** @var coordonnees en dessous a droite */
- static const Coordinates down_right(down+right);
- /** @var coordonnees en dessous a gauche */
- static const Coordinates down_left(down+left);
- /** @var tableau contenant les 8 directions */
- static const Coordinates directions[8]={up, up_right, right, down_right, down, down_left, left, up_left};
- /**
- * Constructeur.
- * @param x_ abscisse
- * @param y_ ordonnee
- */
- Coordinates(int x_, int y_);
- /**
- * Constructeur de copie.
- * @param rCoordinates reference sur l'objet Coordinates a copier
- */
- Coordinates(const Coordinates & rCoordinates);
- /**
- * Destructeur.
- */
- ~Coordinates();
- /**
- * Accesseur pour x.
- * @return abscisse
- */
- int getX();
- /**
- * Accesseur pour y.
- * @return ordonnee
- */
- int getY();
- /**
- * Mutateur pour x.
- * @param x_ nouvelle abscisse
- */
- void setX(int x_);
- /**
- * Mutateur pour y.
- * @param y_ nouvelle ordonnee
- */
- void setY(int y_);
- /**
- * Mutateur pour x et y.
- * @param x_ nouvelle abscisse
- * @param y_ nouvelle ordonnee
- */
- void setXY(int x_, int y_);
- /**
- * Surcharge de l'operateur d'affectation.
- * @param rCoordinates reference sur les coordonnees a copier.
- * @return reference sur la copie.
- */
- Coordinates& operator=(const Coordinates& rCoordinates);
- /**
- * Surcharge de l'operateur addition.
- * @param rCoordinates reference sur les coordonnees a additionner avec les coordonnees courantes.
- * @return addition des coordonnees.
- */
- Coordinates operator+(const Coordinates& rCoordinates) const;
- /**
- * Surcharge de l'operateur addition puis affectation.
- * @param rCoordinates reference sur les coordonnees a ajouter aux coordonnees courantes.
- * @return somme des coordonnees.
- */
- Coordinates& operator+=(const Coordinates& rCoordinates);
- /**
- * Surcharge de l'operateur addition puis affectation.
- * @param rCoordinates reference sur les coordonnees a comparer aux coordonnees courantes.
- * @return true si les coordonnees sont identiques, sinon false
- */
- bool operator==(const Coordinates& rCoordinates) const;
- /**
- * Surcharge de l'operateur addition puis affectation.
- * @param rCoordinates reference sur les coordonnees a comparer aux coordonnees courantes.
- * @return true si les coordonnees sont differentes, sinon false
- */
- bool operator!=(const Coordinates& rCoordinates) const;
- /**
- * Surcharge de l'operateur <<.
- * @return flux sortant contenant les coordonnees.
- */
- friend ostream& operator<<(ostream& out, const Coordinates& rCoordinates);
- };
- ostream& operator<<(ostream& out,const Coordinates& rCoordinates);
- #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.