| [c++] Faire passer un pointeur en double ? [resolu] | |
|
|
Auteur | Message |
---|
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: [c++] Faire passer un pointeur en double ? [resolu] Dim 5 Déc 2010 - 11:22 | |
| Hellooww \o/ Bon, voilà, ma DLL est grosso-merdo finite, il me manque plus qu'une chose, c'est de faire passer des pointeurs de tableaux en double sur GM, pour qu'il puisse ensuite aller chercher les valeurs dans le bon tableau, mais je coince :/ Ma fonction 'principale' : - Code:
-
export double** open_animation(char* file) { // tralala return (double**) array; }
ensuite, je suis sensé récupérer les informations avec cette fonction : - Code:
-
double get_x(double marray,double n) { return(double) (*marray)[n].x; }
Mais ça lui plaît pas du tout.. le marray est sensé être le pointeur du tableau.. Qu'est-ce que je suis sensé faire ? Merci à tous et bonne journée _________________ Because these are not the words of God, the same God that burnt the knowing.
Dernière édition par Termite le Sam 1 Jan 2011 - 22:51, édité 1 fois |
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Dim 5 Déc 2010 - 12:21 | |
| est ce que celui ci te retourne une erreur ? |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Dim 5 Déc 2010 - 14:06 | |
| - gabin49 a écrit:
- est ce que celui ci te retourne une erreur ?
à la compilation, oui "invalid type argument of 'unary*' _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Vivi Utilisateur confirmé: Rang **
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Dim 5 Déc 2010 - 15:42 | |
| C'est ptêtre le [n] qui foirent essaye de le caster en unsigned int |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Dim 5 Déc 2010 - 15:52 | |
| - vivicool a écrit:
- C'est ptêtre le [n] qui foirent essaye de le caster en unsigned int
Nope, ça change rien _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Vivi Utilisateur confirmé: Rang **
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Dim 5 Déc 2010 - 18:25 | |
| mais enfaite tout est bizar dans cette ligne return(double) (*marray)[n].x; :lng: tu serais expliquer ce que c'est sensé faire ? |
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Dim 5 Déc 2010 - 18:41 | |
| tiens bonne question ^^
et "invalid type argument of 'unary*'" c'est parce qu'il ne veut pas peut pas convertir un pointeur en double |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Dim 5 Déc 2010 - 18:50 | |
| Pour récupérer l'adresse d'un pointeur c'est &tonpointeur |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Mer 8 Déc 2010 - 15:09 | |
| - vivicool a écrit:
- mais enfaite tout est bizar dans cette ligne
return(double) (*marray)[n].x; :lng: tu serais expliquer ce que c'est sensé faire ? marray c'est le tableau (l'adresse que je suis sensé faire passer), [n] la ligne ".x" c'est par rapport à la structure du tableau (vector<animdata>): - Code:
-
struct animdata { int x; int y; unsigned short frame_index; char xscale; char yscale; unsigned char layer; };
Oni : donc le &marray est bien sensé être le tableau que je veux, avec marray en double, non ? _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Mer 8 Déc 2010 - 15:55 | |
| et pourquoi tu veux faire passer un pointeur en double ca parait complètement insensé ! si tu veux utiliser un tableau dans GM, va faloir trouver un autre moyen ! |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Mer 8 Déc 2010 - 16:37 | |
| une adresse est toujours codée sur un unsigned int. Après tu peut toujours faire (double)&pointeur mais bon, je vois pas trop ce que tu vas en faire après. |
|
| |
CoDeAVE Utilisateur confirmé: Rang **
Messages : 408 Localisation : Québec
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Jeu 9 Déc 2010 - 15:21 | |
| C'est t'es en 64bits ce n'est plus vrai. |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Ven 10 Déc 2010 - 16:54 | |
| Ben du coups, comment je peux récupérer mes tableaux ? Jveux dire par là, dire à la DLL de charger tel informations dans tel tableau ? _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Vivi Utilisateur confirmé: Rang **
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Ven 10 Déc 2010 - 20:27 | |
| bin un truc genre vector< vector< double > > tabx et t'y accède avec un tabx[(unsigned int)marray][(unsigned int)n] pour reprendre la fonction que tu as faite. et puis pour ajouter des animations : tabx.push_back(vector< double >) et pour ajouter une frame tabx[(unsigned int)marray].push_back(val); un truc comme ça quoi. |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Ven 10 Déc 2010 - 21:50 | |
| - vivicool a écrit:
- bin un truc genre vector< vector< double > > tabx et t'y accède avec un tabx[(unsigned int)marray][(unsigned int)n] pour reprendre la fonction que tu as faite. et puis pour ajouter des animations : tabx.push_back(vector< double >) et pour ajouter une frame tabx[(unsigned int)marray].push_back(val); un truc comme ça quoi.
jvais voir ça, merci _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Sam 18 Déc 2010 - 13:04 | |
| Bon, je m'en sors pas, si quelqu'un pouvait me donner un exemple.. _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Gab666 Modérateur 'Zut'
Messages : 5340 Localisation : **I move away from the mic to breathe in
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Sam 18 Déc 2010 - 16:11 | |
| Si j'ai bien compris la problématique, tu cherches à te faire un tableau qui garde les informations de ton animdata dans un autre tableau de double(parce que tu peux pas passer de structure à GM). Puis passer tout ton tableau, donc un tableau de tableaux. Ça se fait très bien: Tout d'abord tu vas déclarer ton tableau: double ** array; ensuite tu vas instancier ta première colonne avec la taille de ton tableau array = new double* [ANIMDATA_NUMBER]; puis après pour chacune de ces colonnes tu vas aller copier la structure en prenant bien soin d'instancier chacune d'elle de la bonne taille - Code:
-
for(int i=0;i<ANIMDATA_NUMBER;i++) { animdata = tontableaudeanimdata[i]; array[i] = new double[6];//6 étant ton nombre de valeurs à copier array[i][0] = tonAnimdata.x; array[i][1] = tonAnimdata.y; array[i][2] = tonAnimdata.frame_index; array[i][3] = tonAnimdata.xscale; array[i][4] = tonAnimdata.yscale; array[i][5] = tonAnimdata.layer; }
_________________ PIS MANIAC PREND DES BAINS !
|
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Dim 19 Déc 2010 - 21:44 | |
| @Gab : Ben, j'arrive pas à refaire passer les trucs stockés quoi Bon, je pense avoir cerné le problème, voilà mon programme : - Code:
-
struct animdata { int x; int y; unsigned short frame_index; char xscale; char yscale; unsigned char layer; };
using namespace std;
struct animstruct { vector<animdata> anim; unsigned int framecount; };
unsigned int line;
vector <animstruct> *garray;
void set_value(vector<animdata> *array,unsigned int n,int x,int y, unsigned short frame_index,char xscale,char yscale,unsigned char layer) { (*array)[n].x = x; (*array)[n].y = y; (*array)[n].frame_index = frame_index; (*array)[n].xscale = xscale; (*array)[n].yscale = yscale; (*array)[n].layer = layer; }
void array_load (unsigned int n, vector<animdata> *array, unsigned int framecount) { (*garray)[n].anim = (*array); (*garray)[n].framecount = framecount; }
export double open_animation(char* file) {
// import du bordel sur le fichier
line++; garray->resize(line); array_load(line,array,framecount); // je stocke mon vector dans le garray, et je renvois ensuite la ligne à laquelle il est (son Index quoi) return (line); }
Mais ensuite, bah je bloque - Code:
-
double get_x(double id,double n) { // C'est la que je sais pas comment m'y prendre, via id je suis sensé récupérer le bon vector, ensuite via "n" la ligne, et dans cette fonction le membre x }
Vlah, je crois avoir tout expliqué, si quelqu'un pouvait éclairer ma lanterne Merci à vous ! _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Dim 19 Déc 2010 - 21:47 | |
| |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Dim 19 Déc 2010 - 21:49 | |
| - onilink_ a écrit:
- A quoi correspond id ?
le "line" renvoyé dans la fonction open_animation _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Lun 20 Déc 2010 - 11:44 | |
| Bon, j'ai essayé ça : - Code:
-
vector <animdata> get_vector(unsigned int id) { return (*garray)[id].anim; }
double get_x(double id,double n) { return (double) (*get_vector(id))[n].x; }
Maiiss ça donne rien non plus "152 [Warning] passing `double' for converting 1 of `std::vector<animdata, std::allocator<animdata> > get_vector(unsigned int)' 152 no match for 'operator*' in '*get_vector(unsigned int)()' " Sachant que le membre "anim" de garray est casté en vector<animdata>, comment je peux faire ? Merci à vous _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Vivi Utilisateur confirmé: Rang **
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Mer 22 Déc 2010 - 10:34 | |
| étant donné que get_vector retourne une valeur directe et non un pointeur ça me semble strange de mettre un * devant . (space les nouveaux smiley) |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Mer 22 Déc 2010 - 12:25 | |
| - vivicool a écrit:
- étant donné que get_vector retourne une valeur directe et non un pointeur ça me semble strange de mettre un * devant . (space les nouveaux smiley)
Ouais, j'avais essayé mais ça marche pas (vi, ils sont pas beaux ) _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Vivi Utilisateur confirmé: Rang **
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Mer 22 Déc 2010 - 13:40 | |
| ce serait mieux que get_vector ressorte un pointeur ou une référence. donc ce serait : - Code:
-
vector <animdata> & get_vector(unsigned int id){ return garray->at(id).anim; }
double get_x(double id,double n){ return (double) get_vector((unsigned int)id).at((unsigned int)n).x; }
|
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Mer 22 Déc 2010 - 22:10 | |
| - vivicool a écrit:
- ce serait mieux que get_vector ressorte un pointeur ou une référence.
donc ce serait :
- Code:
-
vector <animdata> & get_vector(unsigned int id){ return garray->at(id).anim; }
double get_x(double id,double n){ return (double) get_vector((unsigned int)id).at((unsigned int)n).x; }
Yes, ça a l'air de marché (du moins ça compile, merci à toi ! ) Par contre, quand je charge une animation, j'me choppe un gros "Access Violation at adress 6AF1491" gnagna gna read of adress 00000000", j'pense que ma fonction qui stocke l'array importé dans garray est bidon, c'est celle là : - Code:
-
void array_load (unsigned int n, vector<animdata> *array, unsigned int framecount) { (*garray)[n].anim = (*array); (*garray)[n].framecount = framecount; }
la ligne " (*garray)[n].anim = (*array);" est louche en même temps, une idée ..? Encore merci _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Vivi Utilisateur confirmé: Rang **
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Mer 22 Déc 2010 - 22:22 | |
| Ouai :p bin "read of adress 00000000" c'est que t'as un pointeur non initialisé genre garray qui est déclaré en global donc justement mit à 0, fait un fonction init avec un garray = new vector<animstruct>(); |
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Mer 22 Déc 2010 - 22:33 | |
| - vivicool a écrit:
- Ouai :p bin "read of adress 00000000" c'est que t'as un pointeur non initialisé genre garray qui est déclaré en global donc justement mit à 0, fait un fonction init avec un garray = new vector<animstruct>();
Aah, je vois Mais, si je fous ça dans ma fonction d'export, ça effacera Garray à chaque fois, non ? Ou alors j'le met dans int main() ? edit : En fait je l'avais déjà mit le garray = new vector<animstruct>, dans ma fonction d'export justement.. _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] Mar 28 Déc 2010 - 13:45 | |
| up ! C'est vraiment c'te ligne "(*garray)[n].anim = (*array);" qui fout bordel, le message d'erreur : Access Violation at address 6AF3EAD6 in module "GMDLL.dll". Write of address 00030002." Quand je la vire le message n'apparait plus, la fonction entière : - Code:
-
void array_load (unsigned int n, vector<animdata> *array, unsigned int framecount) { (*garray)[n].anim = (*array); (*garray)[n].framecount = framecount; }
Qu'est-ce que je peux faire ? il faut juste que je stocke l'array importé dans garray Ok, j'ai résolu le problème en virant la structure de garray et en le mettant en vector < vector <animdata > > _________________ Because these are not the words of God, the same God that burnt the knowing.
|
|
| |
Contenu sponsorisé
| Sujet: Re: [c++] Faire passer un pointeur en double ? [resolu] | |
| |
|
| |
| [c++] Faire passer un pointeur en double ? [resolu] | |
|