Renvoi d'un tableau

Renvoi d'un tableau - C++ - Programmation

Marsh Posté le 31-05-2005 à 11:44:27    

Bonjour à tous, je cherche le moyen de renvoyer un tableau pour ensuite accéder à ses différents éléments. J'ai trouvé comment retourner un seul élément du tableau mais pas le tableau tout entier. Quelqu'un pourrait il m'aider svp? Merci d'avance  :jap:  
Aldarek

Reply

Marsh Posté le 31-05-2005 à 11:44:27   

Reply

Marsh Posté le 31-05-2005 à 12:09:04    

Je ne comprends pas ce que tu veux dire.
 
Par exemple si ton tableau est de type (unsigned *), ben tu retournes un (unsigned *) ?

Reply

Marsh Posté le 31-05-2005 à 12:22:13    

Et bien, je veux retourner un tableau d'entier mais lorsque je veux afficher ses valeurs dans une autres méthode d'une autre classe (les classes sont liées par l'héritage), je n'arrive pas à avoir accès à tous les éléments du tableau, mais que au premier.  :pfff:

Reply

Marsh Posté le 31-05-2005 à 12:43:15    

Désolé, j'ai utilisé un autre utilisateur mais j'attends toujours votre réponse :P  :pt1cable:

Reply

Marsh Posté le 31-05-2005 à 13:15:53    

Poste la partie de ton code qui pose problème, pour voir ?

Reply

Marsh Posté le 31-05-2005 à 13:34:58    

c'est n'importe quoi. Déjà il ne faut pas utiliser un machin*, mais un std::vector<>. De plus, pour coller à l'esprit du C++, on n'utilise pas de valeurs de retour dans ce cas. le prototype de ta fonction serait donc
 
 
void f(..., std::vector<unsigned> &out);
 

Reply

Marsh Posté le 31-05-2005 à 13:57:51    

Je comprend rien du tout à ce que tu me met Taz, j'ai jamais entendu parlé de ce vector, pourrais tu être un peu plsu explicite stp? :)
 
Voici le code :
int & Action::renvoyer()
{
 return *objet;
}
 
Et la fonction ou j'apelle cette méthode :
 
void Tamagotchi::doAction(int IDAction)
{
 int modificateur[5];
 modificateur[0] = ArrayAction[IDAction].renvoyer();
 cout<< modificateur[0]<<endl;
}
 
Merci d'avance

Reply

Marsh Posté le 31-05-2005 à 14:34:58    

Taz, j'ai utilisé le vector comme tu me l'avais demandé mais il me sort une erreur, la voici:
error C2440: 'return' : cannot convert from 'class std::vector<int,class std::allocator<int> >' to 'int'
 
Voici aussi la syntaxe de ce que j'ai fait :
 std::vector<int> objet;
 objet.resize(5); //On modifie la taille du tableau à 5 éléments et tous ces éléments sont égaux à 0
 cout << objet.size() << '\n';  //Affiche la taille
 
Merci de m'aider parce que là  :pt1cable:  :pt1cable:  :pt1cable:  

Reply

Marsh Posté le 31-05-2005 à 14:48:14    

tu retourne un vector, verifies les types ! montres du vrai code

Reply

Marsh Posté le 31-05-2005 à 14:53:36    

ok voici le code :
en ce qui concerne les méthodes de la classe:
 
Action::Action()
{
 objet.resize(5); //On modifie la taille du tableau à 5 éléments et tous ces éléments sont égaux à 0
 //cout << objet.size() << '\n';  //Affiche la taille
}
 
int  Action::renvoyer()
{
 return objet[5];
}
 
la classe en elle même:
 
#ifndef ACTION_H
#define ACTION_H
#include <iostream.h>
#include <vector>
 
 
class Action
{
public:
  std::vector<int> objet;
public:
 
 Action();
 int  renvoyer();
 
 
};
 
#endif
 
Et voici la méthode qui apelle renvoyer :
 
void Tamagotchi::doAction(int IDAction)
{
 int modificateur;
 modificateur = ArrayAction[IDAction].renvoyer();
 cout<< modificateur<<endl;
}
 
Voilà mon code, merci de m'aider  :)  :)

Reply

Marsh Posté le 31-05-2005 à 14:53:36   

Reply

Marsh Posté le 31-05-2005 à 15:05:18    

Action::Action() : objet(5) {}
 
std::fill pour initialiser par exemple
 
et le code de renvoyer ? si action::renvoyer retourne 'int' et que tu retourne un vector<int> il y a un probleme au niveau du type, la voila la reponse


Message édité par skelter le 31-05-2005 à 15:20:31
Reply

Marsh Posté le 31-05-2005 à 15:09:39    

Quelle est la syntaxe parce que je met vector<int> en valeur retournée et il me met un max d'erreurs.
Je ne comprend pas très bien la première ligne, tu pourrais t'expliquer stp?
Merci :P

Reply

Marsh Posté le 31-05-2005 à 15:17:10    

Sinon j'ai dit que le résultat de la valeur retournée était aussi un vector comme ceci :
 
 std::vector<int> modificateur;
 modificateur.resize(5);
 modificateur = ArrayAction[IDAction].renvoyer();
 cout<<modificateur<<endl;
 
Suite à la compilation, il me met les erreures suivantes :
 
binary '=' : no operator defined which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
binary '<<' : no operator defined which takes a right-hand operand of type 'class std::vector<int,class std::allocator<int> >' (or there is no acceptable convers
 
Quelqu'un pourrait il m'expliquer, ou me dire tout simplement que mon idée n'était pas bonne au départ... :)

Reply

Marsh Posté le 31-05-2005 à 15:18:53    

objet( std::vector<int>(5) )  
 
beurk, pourquoi tu veux pas utiliser objet(5) ?

Reply

Marsh Posté le 31-05-2005 à 15:19:04    

tu retourne "std::vector<int> &" ou "const std::vector<int> &" (avec action::renvoyer en const) ou une copie en passant le vector retour par reference, c'est a toi de voir
la premier ligne c'est la construction de "objet"

Reply

Marsh Posté le 31-05-2005 à 15:19:56    

Taz a écrit :

objet( std::vector<int>(5) )  
 
beurk, pourquoi tu veux pas utiliser objet(5) ?


 
carrement ! je me complique (j'edit)

Reply

Marsh Posté le 31-05-2005 à 15:30:04    

Les gars franchement je comprend rien à ce que vous faites, en ce qui concerne la construction de objet, c'est pas mieux de le faire dans la classe?
Et ensuite on le défini dans le constructeur non?  
 
Sinon même si j'ai pas mis ca, tout marche bien mis à part que quand je veux afficher les valeures modifiées, elles sont égales à 0.
Voici la syntaxe, dites moi si il y a une erreur :  
 
void Tamagotchi::doAction(int IDAction)
{
 /*std::vector<int> modificateur;
 modificateur.resize(5);*/
 propriete = ArrayAction[IDAction].renvoyer();
 cout<<propriete[0]<<endl;
}
 
Propriete étant un vector aussi :)

Reply

Marsh Posté le 31-05-2005 à 15:34:49    

Soit dit en passant, a t'on le droit de faire ceci
 
ArrayAction[0]=*new Manger;
 
ArrayAction étant un pointeur de type Action qui est une de mes classes


Message édité par Llialn le 31-05-2005 à 15:37:30
Reply

Marsh Posté le 31-05-2005 à 15:41:16    

il n'y a pas de "a t'on le droit de faire ceci ", des fois il faut reflechir ??

Reply

Marsh Posté le 31-05-2005 à 15:42:59    

Je suis bien d'accord, mais étant un peu nul en C++ et qu'on me demande de faire un projet de cinglé  :pt1cable:  :pt1cable: , je demande l'aide de personnes sachant se démerder, et c'est pourquoi tout ce qui me parait louche, je demande si c'est bon ou pas.
Merci de me répondre :)

Reply

Marsh Posté le 31-05-2005 à 15:49:22    

ArrayAction[0]=*new Manger; compile sans doute si il n'y a pas de probleme de type mais c'est pas bon (tu ne peux pas liberer le Manger alloue dynamiquement) et inutile


Message édité par skelter le 31-05-2005 à 15:49:51
Reply

Marsh Posté le 31-05-2005 à 16:11:14    

Il ne me met pas d'erreur, mais si tu dis que c'est pas bon, c'est peut être pour ca que j'obtiens de la merde ensuite.
En fait, je t'explique rapidement, j'ai une classe manger qui hérite d'action, et cette classe action, elle renvoi un vector, ce sur quoi je suis depuis un bout de temps maintenant :). Ensuite dans ma classe "principale", je crée un tableau d'actions qui à chaque élément correspond une action par exemple ArrayAction[0] c'est manger etc
Et mon tableau ArrayAction est déclaré comme ceci dans ma classe:
 
Action *ArrayAction;
 
Ensuis dans la constructeur: ArrayAction= new Action[5];
et le destructeur : delete[] ArrayAction;
 
Et donc pour dire que ArrayAction[0] correspond à Manger, j'ai fait comme ceci : ArrayAction[0]=*new Manger;
 
Mais tu me dis que ca n'est pas bon, as tu une idée alors?
 
Merci beaucoup pour ton aide Skelter :D :D
 

Reply

Marsh Posté le 31-05-2005 à 16:23:13    


Citation :


Il ne me met pas d'erreur, mais si tu dis que c'est pas bon, c'est peut être pour ca que j'obtiens de la merde ensuite.


 
c'est pas bon mais ca ne cause pas d'erreur, tu alloue dynamiquement un objet et tu le
copie mais tu ne le libere pas
 

Citation :


Action *ArrayAction;
 
Ensuis dans la constructeur: ArrayAction= new Action[5];
et le destructeur : delete[] ArrayAction;


 
c'est loin d'etre aussi simple que ca, fais plutot std::vector<Action> ArrayAction;
 

Citation :


Et donc pour dire que ArrayAction[0] correspond à Manger


 
tu veux faire du polymorphisme ?

Reply

Marsh Posté le 31-05-2005 à 16:27:47    

tu veux faire du polymorphisme ?
 
Kézako??? Moi pas comprendre toi quoi me dire  :pt1cable:  :pt1cable:  :pt1cable:  
 
Ca va changer quoi que je fasse un vector pour ArrayAction??
 
Merci :)

Reply

Marsh Posté le 31-05-2005 à 16:36:55    

ca sera beaucoup plus simple et plus sur !
le polymorphisme c'est ce que tu veux faire mais avec ton niveau ca va etre dur

Reply

Marsh Posté le 31-05-2005 à 16:41:36    

Alors pour le fait que ca soit plus simple ok pourquoi pas mais du coup il me met des erreurs encore
 
 ArrayAction.resize(5);
 ArrayAction[0]=new Manger; //à cette ligne : error C2100: illegal indirection et aussi error C2440: '=' : cannot convert from 'class Manger *' to 'int'
 doAction(0);
 
Je pense que c'est du à une mauvaise untilistaion du polymorphisme si j'ai bien compris.
 
Il me met aussi cette erreur si comprend quelque chose :  
 
propriete = ArrayAction[IDAction].renvoyer(); //:error C2228: left of '.renvoyer' must have class/struct/union type
 
Merci skelter

Reply

Marsh Posté le 31-05-2005 à 16:50:47    

bon ben je vais aller me pendre ... des gars qui comprennent rien au typage à ce point j'ai jamais vu ça. Non, un pointeur n'est pas un tableau, une instance n'est pas un int ...

Reply

Marsh Posté le 31-05-2005 à 16:58:54    

Plutot que d'aller te pendre à cause de la stupidité de certains que tu trouves affligeante, peut être essaierai tu de m'aider comme essaies de le faire gentiment skelter depuis maintenant un après midi tout entier. Parce que les remarques du genre des mecs comme ça, j'en ai pas besoin, mis à part pour tout mettre direction la corbeille. Merci Taz.
Je suis étudiant en BTS et pour le seul gros projet que l'on avait à faire, on nous a donné au moins 10 pages d'analyse avant d'attaquer le code, et là je suis en stage et on me dit de réaliser un projet qui fait deux fois la taille du seul que j'ai fait avec pour seule analyse un doc word de 3 pages que j'ai du faire moi même, donc si vous pouviez être indulgent ca serait sympa. Merci les amis  :jap: (j'attends votre aide)

Reply

Marsh Posté le 31-05-2005 à 17:04:09    

Taz est sec mais il n'a pas tord, il te manque beaucoup trop de base pour qu'on puisse t'aider efficacement
si tu es en stage lis des cours, des faq sur le c++ ca sera beaucoup moins de temps perdu que de buter sur chaque message d'erreur de ton compilateur "cannot convert..." :)

Reply

Marsh Posté le 31-05-2005 à 17:08:32    

Je suis tout à fait d'accord avec toi skelter et avec taz aussi mais il y a d'autres facon de les dire. Je vais donc me retirer pour aller lire comme tu l'a dit des FAQ et autres tutoriaux pour essayer de comprendre mais là ca fait 3 jours que je rame comme jamais et je commence vraiment à en avoir ras le bol, mais bon, on fait pas toujours ce qu'on veux. En tout cas, merci de m'avoir aider. Lorsque je serai aussi doué que vous, j'aiderai les petits nouveaux comme moi qui galèrent sur des conneries. Salut à tous  :hello:   :hello:

Reply

Marsh Posté le 31-05-2005 à 17:30:18    

c'est pas une FAQ qu'il te faut, c'est un cours. C'est pas être doué, c'est avoir les bases.

Reply

Marsh Posté le 07-06-2005 à 16:17:59    

petite suggestion : vous avez pas l'impression de vous être éloigner du sujet ????  :heink: (retourner un tableau .....).

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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