Qu'est-ce que peut siginfier l'erreur non value assignement ?
Qu'est-ce que peut siginfier l'erreur non value assignement ?
je ne programme pas avec devc++ mais ne serais-ce pas que tu utilises une variable non initialisée ?
En fait, dans mon programme, j'ai fait une classe sprite (récupérée en partie sur c++france)
Et voici un tout petit bout de mon code ou il me dit nonvaluassignement :
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 class Sprite { private: SDL_Surface **image; SDL_Rect *rect; int taille; int x; int y; int angle; int vitesse; public: // Constructeur. Sprite(int nbr_Sprite=350); // Destructeur. ~Sprite(); //Situation de sprite int get_x(int numSprite); int get_y(int numSprite); int get_angle(int numSprite); int get_vitesse(int numSprite); // Creation de sprite. int LoadBMP(char *nom, int x=0, int y=0, bool trans=false); int SetImage(SDL_Surface *newImage, int x=0, int y=0, bool trans=false); // Suppretion d'un sprite. void Supp(int numSprite); // Deplacement des sprite. void SetPos(int numSprite, int x, int y); void Move(int numSprite, int dep_x, int dep_y); // recupertion de la position d'un sprite. SDL_Rect *Pos(int numSprite); // Dessine les sprite void affich(SDL_Surface *cible, int numSprite); bool colision(int numSprite1, int numSprite2, int type); };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 double rad = (3.1416 * tab.get_angle(0)) / 180; tab.get_x(1)+=(int)(cos(rad)*tab.get_vitesse(1)); tab.get_y(1)+=(int)(sin(rad)*tab.get_vitesse(1));
Et voici les fonctions censées me permettre de récupérer x et y du sprite :
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 int Sprite::Get_angle(int numSprite) { return Sprite.angle; } int Sprite::Get_vitesse(int numSprite) { return Sprite.vitesse; } int Sprite::Get_x(int numSprite) { return Sprite.x; } int Sprite::Get_y(int numSprite) { return Sprite.y; }
Bonjour,
Ce n'est pas plutot que tu essais d'assigner une valeur à autre chose qu'une variable, une fonction par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part non value assignement
Envoyé par insomniak
MMmmh... J'èsperai pouvoir le modifier grace a cette fonction, mais apperremment non...
Comment fait-on pour modifier des variables en private ?
Généralement, il y a une méthode du genre :Envoyé par insomniak
(set à la place de get)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int set_x(int numSprite); int set_y(int numSprite);
Mais là, il semble falloir utiliser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part void SetPos(int numSprite, int x, int y);
hum.. ok merci !!
Par contre, setpos sert juste a modifierla position de l'image, pas les variables de la classe.
Encore merci !!
Alors voila, j'ai tout corriger, mais a ces 4 lignes là :
Il me dit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if (balle.get_angle(0) > 180 && xrelsouris < 0) balle.set_vitesse(0, balle.get_vitesse--); if (balle.get_angle(0) > 180 && xrelsouris > 0) balle.set_vitesse(0, balle.set_vitesse++); if (balle.get_angle(0) < 180 && xrelsouris < 0) balle.set_vitesse(0, balle.set_vitesse++); if (balle.get_angle(0) < 180 && xrelsouris > 0) balle.set_vitesse(0, balle.set_vitesse--);
no post-decrement operator for type
Alors que pour cette ligne là :
Il ne me dit rien... Pourtant, j'ai vérifié, get_x renvoi un int et get_angle aussi...
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (balle.get_x(0)>784)
Ce ne serait pas plutôt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if (balle.get_angle(0) > 180 && xrelsouris < 0) balle.set_vitesse(0, balle.get_vitesse() - 1); if (balle.get_angle(0) > 180 && xrelsouris > 0) balle.set_vitesse(0, balle.get_vitesse() + 1); if (balle.get_angle(0) < 180 && xrelsouris < 0) balle.set_vitesse(0, balle.get_vitesse() + 1); if (balle.get_angle(0) < 180 && xrelsouris > 0) balle.set_vitesse(0, balle.get_vitesse() - 1);:
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Je n'avais pas pensé a ça, mais effectivement, tu as raison...
Moi j'dit vive les modos ^^
Il y a aussi une autre solution, pour modifier et obtenir une variable private :
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 struct Pos { int x; int y; } class Objet { public: Pos & Position(); private: Pos LaPosition; } Pos & Objet::Position() { return LaPosition; } Exemple de code : { Objet Truc; Truc.Position().x = 5; cout << Truc.Poition.y; }
Mes articles Développez | Dernier article : Raytracer en haskell
Network library : SedNL | Zenol's Blog : http://zenol.fr
N'oubliez pas de consulter la FAQ et les cours et tutoriels.
Si ce n'est que pour fournir un accès en lecture / écriture (pas de calcul à faire, pas d'invariant à vérifier, ...) alors ça ne sert à rien : autant mettre la donnée en accès publique directement.
Voir la FAQ à ce sujet.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Oui, mais je m'en suis rendu compte plus tard, qu'en faite tout ça ne servait a rien...
Mais j'aurais au moins appris des choses !!
Partager