Redefinition of class MAIS avec #ifndef
Bonjour à tous !
Voila dans le cadre de l'un de mes projets (un jeu de Taquin), j'ai voulu créer une classe d'exception, s'occupant de gérer toutes les exceptions sur mon prog.
Suite à ça, je commence à créer une, puis deux, puis trois classes, et là c'est le drame ! Le compilo déconne sur le main avec le message suivant :
Code:
1 2 3 4
| In file included from Watcher.h:4:0,
from main.cpp:5:
PuzzleException.h:13:7: error: redefinition of class PuzzleException
PuzzleException.h:13:7: error: previous definition of class PuzzleException |
Le problème... C'est que j'ai mis les #ifndef, #define et #endif sur toutes mes classes !
J'avoue que là... Je suis paumé !
Voici ma classe d'exception :
Code:
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
| #ifndef PUZZLEEXCEPTION_H
#define PUZZLEEXCEPTION_h
#include <iostream>
#include <sstream>
#include <exception>
/*
Je vous passe les commentaires Doxygen
.
.
*/
class PuzzleException : public std::exception{
public :
inline PuzzleException(int id=0, std::string const& message= "") throw() : $identification(id), $message(message){}
inline virtual const char* what() const throw(){
std::ostringstream _oss;
_oss << $identification;
std::string _result = _oss.str();
_result += " : ";
_result += $message;
return (_result.c_str());
}
inline virtual ~PuzzleException() throw(){}
private:
int $identification;
std::string $message;
};
#endif /* PUZZLEEXCEPTION_H */ |
(Excusez si c'est moche, mais c'est en cours d'écriture :lol: )
Le header de ma classe Brick :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #ifndef BRICK_H
#define BRICK_H
#include "PuzzleException.h"
class Brick{
public:
Brick(int val);
int getValue();
void setValue(int new_val);
private:
int $value;
};
#endif /* BRICK_H */ |
Celui de ma classe Watcher :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #ifndef WATCHER_H
#define WATCHER_H
#include "PuzzleException.h"
class Watcher{
public:
Watcher();
int getNbMovePlayed();
int getNbRemainingMove();
void setNbRemainingMove(int val);
void increaseMovePlayed();
private:
int $move_played;
int $remaining_move;
};
#endif /* WATCHER_H */ |
Et enfin mon Main :
Code:
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
|
#include <iostream>
#include "PuzzleException.h"
#include "Movement.h"
#include "Brick.h"
#include "Watcher.h"
int main(){
//Brick class test
if(state == 0){
Brick br(32);
try{
Brick br2(-42);
state = 1;
s = "Exception expected on Brick Construction";
}
catch(PuzzleException &e){}
if(br.getValue() != 32){state = 1; s="Bad Brick::getValue()";}
br.setValue(42);
if(br.getValue() != 42){state = 1; s="Bad Brick::setValue()";}
}
//Watcher class test
if(state == 0){
Watcher wa;
if(wa.getNbMovePlayed() != 0){state =1 ; s="Bad Watcher::getNbMovePlayed()";}
for (int _i = 0 ; _i < 10 ; _i++){wa.increaseMovePlayed();}
if(wa.getNbMovePlayed() != 10){state = 1; s="Bad Watcher::increaseNbMovePlayed()";}
if(wa.getNbRemainingMove() != 0){state = 1; s="Bad Watcher::getRemainingMove()";}
wa.setNbRemainingMove(42);
if(wa.getNbRemainingMove() != 42){state = 1; s="Bad Watcher::setRemainingMove()";}
try{
wa.setNbRemainingMove(-42);
state = 1;
s = "Expect exception on Watcher::setRemainingMove()";
}catch(PuzzleException &e){}
}
//Result
std::cout << s << std::endl;
return state;
} |
Pareil, pardon aux familles si c'est moche, tout ça... :mouarf:
Bref, Quelqu'un a-t-il une idée ?
Walther Bishop
PS : Etant nouveau posteur sur le forum, désolé si je me suis trompé de topic :?