Bonsoir.
Comment faire pour qu'un fonction retourne l'adresse d'une structure ??
Merci d'avance![]()
Bonsoir.
Comment faire pour qu'un fonction retourne l'adresse d'une structure ??
Merci d'avance![]()
Hope it helps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 typedef struct { int i; } structToto; structToto* fonctiontoto() { [...] return &sToto; //la variable est de type structToto }
Je pense que ça ira, merci![]()
Et mince... Petit problème...
En fait, ma structure est déja déclarée dans ma classe, et c'est un pointeur car je fais une allocation dynamique pendant le programme. Ainsi, ma fonction doit retourner l'adresse d'une partie du tableau de structure en question.
Comment faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 struct Data_Texture_Sol C_Terrain::*Get_DataTextureSol(int TextureSol) { return &Data_TextureSol[TextureSol]; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class C_Terrain { private: [...] struct Data_Texture_Sol *Data_TextureSol; public: struct Data_Texture_Sol *Get_DataTextureSol(int TextureSol); };
Si j'ai bien compris, Data_TextureSol est un tableau? Si oui, alors:
[/quote]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class C_Terrain { private: [...] Data_Texture_Sol *Data_TextureSol; //pas de struct en début de ligne public: Data_Texture_Sol *Get_DataTextureSol(int TextureSol); //pas de struct en début de ligne };
Ce code devrait fonctionner, mais il est absolument horrible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Data_Texture_Sol* C_Terrain::Get_DataTextureSol(int TextureSol) { if (TextureSol<size) //size=taille de ton tableau { return &Data_TextureSol[TextureSol]; } else { return NULL; } }
Dans une optique purement didactique, je me permet de le corriger un peu:
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 #include <vector> typedef struct { int toto; } Data_Texture_Sol; class CTerrain // Evite de mette des "_" partout, ça rend le code inutilement illisible { private: [...] std::vector<Data_Texture_Sol*> m_DataTextureSolList; //l'utilisation du template vector est infiniment préférable à un tableau de type C //de plus, utilise de préférence un tableau de pointeurs, c'est plus souple //enfin, l'utilisation du préfixe "m_" indique qu'il s'agit d'une variable membre. C'est une convention utilisée par beaucoup de développeur. public: Data_Texture_Sol* GetDataTextureSol(int iIndex); //la pertinence des noms de variables est importante. De plus, le mot "index" représente un concept ultra fréquent en programmation. }; Data_Texture_Sol* CTerrain::Get_DataTextureSol(int iIndex) { if (iIndex<m_DataTextureSolList.size()) { // toujours tester la validité d'un indice quand on attaque un tableau return m_DataTextureSolList.at(iIndex); } else { return NULL; } }
On en fait pas de typedef struct machin {} en C++, le typedef ne sert plus
Je plussoie r0d![]()
Partager