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);:
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; }
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.
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 !!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager