Boolean qui passe de true a false sans qu'on lui demande

Boolean qui passe de true a false sans qu'on lui demande - C++ - Programmation

Marsh Posté le 02-03-2006 à 21:26:50    

Bonsoir tout le monde,
 
Je viens de tomber sur un os plutot gênant. Voila le tableau...j'ai une classe qui a un booleen en protected et un tableau d'un autre classe en private. Cette dernière peut donc accéder au booleen et verifier sa valeur... Le probleme c'est qu'avant de lancer une fonction x dans une fonction y (toutes deux de la deuxieme classe) j'affiche la valeur de ce booleen et juste a l'entrée de y je l'affiche aussi...et la suprise le booleen s'est inversé.
 
Voila le code si ca peut aider:
 
Mes deux classes

Code :
  1. class Board : public QLabel {
  2.     public:
  3.         Board( bool aiSet = false, int sizeOthellier = 0, QWidget *parent = NULL );
  4.         void resetBoard();
  5.         void initCases();
  6.         void putTileBoard( int x,int y,tile color );
  7.         int getSize(){ return size; };
  8.         bool getAi(){ return isAi; };
  9.         void setAiBoard( bool isSet ){};
  10.         tile getOthellierTile(int x,int y);
  11.     protected:
  12.         QPixmap *background;
  13.         QPixmap *whitePiece;
  14.         QPixmap *blackPiece;
  15.         bool isAi,waitingComp;
  16.     private:
  17.         Case ** tiles;
  18.         int size;
  19.         QPixmap *boardImage;
  20.         QLabel *playZone;
  21.         QVBoxLayout *layout;
  22.         QGridLayout *grid;
  23. };
  24. class Case : public Board {
  25.     Q_OBJECT
  26.     public:
  27.         Case( QWidget *parent = NULL );
  28.         tile getTile(){ return value; };
  29.         void setTile( tile newValue, bool beginning = false);
  30.         void setCoord(int x,int y);
  31.         void setParent(QWidget *parent);
  32.     public slots:
  33.         void setWhite();
  34.         void setBlack();
  35.         void updateTile( bool reset = false );
  36.     signals:
  37.         void clickedCase(int coordX,int coordY);
  38.     protected:
  39.         void mousePressEvent(QMouseEvent *event);
  40.         void mouseReleaseEvent(QMouseEvent *event);
  41.     private:
  42.         tile value;
  43.         QPoint *pressed;
  44.         bool erase;
  45.         int coordX,coordY;
  46.         QWidget *parent;
  47. };


 
Mes fonctions x et y:
 

Code :
  1. void Board::putTileBoard( int x, int y, tile color ){
  2.     if( x>=0 && y>=0 && x<size && y <size){
  3.         (isAi)?debug("true" ):debug("false" );
  4.         (tiles[x][y]).setTile(color,false);
  5.     }
  6.     else
  7.         debug("The programme try to modify a forbidden adress in function Board::putTileBoard" );
  8. }
  9. void Case::setTile( tile newValue, bool beginning){
  10.     (isAi)?debug("true" ):debug("false" );
  11.     value = newValue;
  12.     if(newValue == WHITE ){
  13.         if(!beginning && isAi) QTimer::singleShot(1000, this, SLOT( setWhite() ));
  14.         else{
  15.             setWhite();
  16.         }
  17.     }
  18.     else if(newValue == BLACK){
  19.         setBlack();
  20.     }
  21.     else clear();
  22. }


 
Je me sens un peu désemparé face a ce probleme....

Reply

Marsh Posté le 02-03-2006 à 21:26:50   

Reply

Marsh Posté le 02-03-2006 à 21:52:52    

Bon j'ai réglé mon problème en passant mon bool en parametre...ce qui me dit toujours pas ou est le problème...par curiosité ca m'intéresserait vraiment de savoir d'ou vient ce problème.

Reply

Marsh Posté le 03-03-2006 à 05:46:06    

ben ce n'est pas la même variable
 
ton board a un tableau de cases et un boulet un "isAI_Board",  
Chaque case (i,j) de ton board dérive d'un board lui-même qui a un boulet un isAI_Case_i_j.
 
Donc quand tu changes la valeur de isAI_Board, tu ne changes pas automagiquement la valeur
de chaque isAI_Case_i_j
 
Bref c'est normal que ça ne marche pas.
 
Voilà.
LeGreg

Reply

Marsh Posté le 03-03-2006 à 23:03:49    

ya problème de design la :o
 
ta classe Case n'a aucune raison de dériver de Board :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed