Titre: [C++] Quelques questions Posté par: Mic32768 le 26 Novembre 2006 à 05:29:21 Salut, je suis relativement nouveau dans le C++ et j'avais quelques questions:
1-Quelle est la manière la plus "propre" de convertir un char* en wchar_t*? La raison est que j'essaie d'utiliser la fonction open pour pouvoir traiter un fichier à l'aide de la procédure suivante: Code: void DumpTabInFile(char * cTableau,const int & iTailleTableau,const wchar_t * cFilename) DumpTabInFile(cTableau, iTailleTableau, "h2.txt"); Mais l'erreur suivante apparaît lors de la compilation: Error 1 error C2664: 'DumpTabInFile' : cannot convert parameter 3 from 'const char [7]' to 'const wchar_t *' c:\documents and settings\michael\mes documents\visual studio 2005\projects\file_challenge4\file_challenge4\main.cpp 74 2-Lorsque on a une fonction simple comme ça: Code: void show(int nombre) Du genre: Code: void Show(const int & nombre) Merci de votre précieux temps =D Edit: Finalement, j'ai une autre question.. Admettons qu'on créé un tableau à l'aide de l'allocation dynamique de la manière suivante: Code: int * tableau; Titre: [C++] Quelques questions Posté par: neoflo le 26 Novembre 2006 à 10:56:36 2.
Pour un int, le passer par paramètre ou par référence ou par pointeur sera de la même efficacité. Le pointeur est placé sur la pile d'appel ou le paramètre aussi. Mais en général, la taille d'un pointeur est le même que celle d'un entier ce qui fait que cela ne change pas grand chose. Dans le cas de structure dont la taille n'est pas connu (ou de classe), il est souvent très recommandé de le passer par référence ou par pointeur (pour les raisons cités ci-dessus). Le fait de passer par pointeur, dans le prototype ne permet pas de montrer que l'objet ne sera pas modifié (alors qu'avec un const& i si). Dans certains cas, on se retrouve obligé de passer un int par pointeur ou référence (dans le cas ou l'on souhaite modifier la valeur). Il y a certains surcharges d'opérateurs ou il est également préférable (même obligatoire) d'utiliser une référence qu'un pointeur. 3. Pour le redimensionnement des tableaux. Directement comme ça, il n'est pas possible de le faire. Il faut passer par la STL (standard templates library) et utiliser des std::vector<> avec std::vector<>resize(); Une question, pourquoi as-tu besoin de faire cela ? En général, il n'y a vraiment pas souvent besoin. Il y a toujours eu des types abstraits mieux adapté pour ce que j'avais à faire que d'utiliser ce type de chose. Titre: [C++] Quelques questions Posté par: Mic32768 le 26 Novembre 2006 à 20:46:18 Thanks pour l'info neoflo!
En ce qui concerne wchar_t, je vais donner plus de détails: Code: void DumpTabInFile(char * cTableau,const int iTailleTableau) Error 1 error C2664: 'DumpTabInFile' : cannot convert parameter 3 from 'const char [7]' to 'const wchar_t *' c:\documents and settings\michael\mes documents\visual studio 2005\projects\file_challenge4\file_challenge4\main.cpp 74 On m'a parlé d'un reinterpret_cast et de quelque chose qui ressemblait à ça: ctype<wchar_t>(locale()) mais je ne sais absolument pas comment l'utiliser. Merci d'avance! Titre: [C++] Quelques questions Posté par: neoflo le 26 Novembre 2006 à 21:49:33 Le prototype de open est de la forme : const char*.
Tu ne peux pas faire ça : Code: void DumpTabInFile(char * cTableau, int iTailleTableau,const char * cFilename) Code: DumpTabInFile(pointeur, 12, "machin.txt"); Titre: [C++] Quelques questions Posté par: Mic32768 le 26 Novembre 2006 à 21:55:19 Mais dans ce cas comment on s'y prend pour utiliser cette fonction en passant le nom du fichier en paramètre?
C'est là que je bloque =( Titre: [C++] Quelques questions Posté par: neoflo le 26 Novembre 2006 à 21:59:30 T'as peut être pas vu la dernière modif :
Comme ça qu'on fait : Code: DumpTabInFile(pointeur, 12, "machin.txt"); Titre: [C++] Quelques questions Posté par: Mic32768 le 26 Novembre 2006 à 22:01:56 Je vais essayer ça.. Mais tu avais écrit: "tu ne peux pas faire ça"
En tout cas, je regarde ça tout de suite. Titre: [C++] Quelques questions Posté par: neoflo le 26 Novembre 2006 à 22:02:56 quand j'ai dit : Tu ne peux pas faire ça
C'était une question =D Car tu aurais peut être absoluement voulu utiliser qqch d'autres que char* Titre: [C++] Quelques questions Posté par: Mic32768 le 26 Novembre 2006 à 22:05:32 Haha MERCI! J'ai essayé ce que tu m'as dit et ça fonctionne parfaitement! Dire que ça fait 2 jours que je me casse la tête sur quelque chose d'aussi simple.. Le wchar_t n'avait aucun rapport en plus.. C'est toujours cool de programmer quand ça fonctionne =D
:cool: Titre: [C++] Quelques questions Posté par: neoflo le 27 Novembre 2006 à 01:02:51 Par rapport à ta question 2, tu peux lire : http://www.vuibert.com/DOC/26-pass_cplus2.pdf (je suis en train de le lire).
Ils disent notamment : Citation L’emploi du passage par r´ef´erence en vue de modifier la valeur d’objets de la fonction appelante est le sujet d’une controverse entre programmeurs. Les uns y voient une commodit´e int´eressante, les autres le d´econseillent. Ces derniers font valoir que le seul examen du code de la fonction appelante ne permet plus de savoir si la valeur des arguments d’appel risque d’ˆetre modifi´ee. Il faut pour cela se reporter au prototype de la fonction appel´ee qui peut se trouver dans un fichier en-tˆete. Ils recommandent donc de n’utiliser le passage par r´ef´erence que pour des fonctions qui ne modifient pas les arguments d’appel 4 ou lorsque l’objet `a transmettre est de grande taille, le passage par r´ef´erence ´evitant la recopie sur la pile. Titre: [C++] Quelques questions Posté par: Mic32768 le 27 Novembre 2006 à 08:23:48 Ouais donc dans le fond, ça ne donne pas grand chose de faire passer, en paramètre, un int par référence. Autrement dit, faut utiliser la référence seulement quand on a de gros paramètres.
|