Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1692 connectés 

 


Dernière réponse
Sujet : Problème avec tableau dynamique
LeGreg

El_Gringo a écrit a écrit :

et, par curiosité, comment je fais par exemple pour utiliser des string ? y a des includes particulier à faire ? les dll à linker ?
tu peux me faire un tout petit exemple, vite fait ?




 

Code :
  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. string hello_string = "hello world !\n";
  7. cout << hello_string;
  8. return 0;
  9. }


 
Enfin c'est la version compliquee:
j'etais pas obligee d'utiliser une string intermediaire
mais bon tu m'as demande l'exemple avec les strings alors..
 

El_Gringo a écrit a écrit :

 
ou alors mieux qui c'est qui fait la STL !? pour aller voir la doc sur leur site internet...  




La STL fait partie du langage C++.
C'est pour ca que si tu pretends etre un gourou en C++
et que si un employeur te pose des questions
sur la STL et que tu ne vois pas de quoi il parle
tu es mal :).
 
A+
LEGREG


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
LeGreg

El_Gringo a écrit a écrit :

et, par curiosité, comment je fais par exemple pour utiliser des string ? y a des includes particulier à faire ? les dll à linker ?
tu peux me faire un tout petit exemple, vite fait ?




 

Code :
  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. string hello_string = "hello world !\n";
  7. cout << hello_string;
  8. return 0;
  9. }


 
Enfin c'est la version compliquee:
j'etais pas obligee d'utiliser une string intermediaire
mais bon tu m'as demande l'exemple avec les strings alors..
 

El_Gringo a écrit a écrit :

 
ou alors mieux qui c'est qui fait la STL !? pour aller voir la doc sur leur site internet...  




La STL fait partie du langage C++.
C'est pour ca que si tu pretends etre un gourou en C++
et que si un employeur te pose des questions
sur la STL et que tu ne vois pas de quoi il parle
tu es mal :).
 
A+
LEGREG

El_gringo ha ha... ouais, je code en C++... sous windows. Quel besoin j'aurai eu d'aller vois si la STL (que g jammais utilisée) est compatible avec autre chose que windows !??
El_gringo et, par curiosité, comment je fais par exemple pour utiliser des string ? y a des includes particulier à faire ? les dll à linker ?
tu peux me faire un tout petit exemple, vite fait ?
ou alors mieux qui c'est qui fait la STL !? pour aller voir la doc sur leur site internet...
LeGreg

El_Gringo a écrit a écrit :

Et qu'y suffit de lire le sujet pour éviter de dire n'imp, et de voir qu'il utilise lui même des CString. S'il tenais à ce que son truc soit multiplateforme, il l'aurai précisé...




Donc y'a pas de probleme :D.
Par contre s'il utilise les conteneurs MFC il a
deja fait la moitie du boulot
comme disait la personne qui a evoque
les CArray et CList
(ou list et vector pour la STL)
 

El_Gringo a écrit a écrit :

 
les fonctions de la STL c pas spécifique à Windows ?




 
Euh.. tu codes en C++ :D ?
 

El_Gringo a écrit a écrit :

 
Moi, qd g commencé le C++, ce qui m'a décider à préférer les objets des MFC à ceux de la STL, c que sur MSDN Library, la doc sur la STL est toute pourrie :D  




 
Un peu normal. ils vont pas detailler un truc
qui n'est pas developpe par eux et qui fait
double emploi avec leur solution.
 
A+
LEGREG

El_gringo Et qu'y suffit de lire le sujet pour éviter de dire n'imp, et de voir qu'il utilise lui même des CString. S'il tenais à ce que son truc soit multiplateforme, il l'aurai précisé...
Et... là je reprend mon calme :D
les fonctions de la STL c pas spécifique à Windows ?
Moi, qd g commencé le C++, ce qui m'a décider à préférer les objets des MFC à ceux de la STL, c que sur MSDN Library, la doc sur la STL est toute pourrie :D
LeGreg

El_Gringo a écrit a écrit :

 
Et c quoi les MFC si c pas du C++ !?? c'est d'la merde en boite !?




 
Le probleme..(si probleme il y a)
c'est que la personne qui a pose
sa question (Sielfried)
n'a pas precise qu'elle souhaitait
coder en C++ sous environnement Microsoft  
(Visual Studio+windows).
Donc idealement, il vaut mieux rediriger
vers les strings de la STL
que vers la solution MFC.
 
A+
LEGREG

sielfried

El_Gringo a écrit a écrit :

 
 
Et c quoi les MFC si c pas du C++ !?? c'est d'la merde en boite !?
bon Dieu d'bon Dieu...
oups... g affaire à une demoiselle.
Pardon d'vous dire ça mam'selle BENB, mais les MFC, Microsoft Fondation Class, c du C++, tu veux que ça soit des classes écrites en quoi !? Avant de critiquer, est ce que t'as déja rencontré le moindre problème avec des CString !? j'en doute... alors quand on sait pas, on fait pas de l'anti-MFC-isme primaire !




 
Dans mon cas je n'ai effectivement jamais eu de problèmes avec les CString, méthodes efficaces, concaténation hyper simple, etc... Je ne m'en plains pas même si cela fait peu de temps que je travaille avec les MFC.
 

Citation :

Pour ce que tu veux faire, niveau des CString, t'as les CStringArray, sinon tu peut utiliser des CPtrArray qui te permet de stocker (dynamiquement) des pointeur vers tout ce que tu veux... Donc tu peut utiliser ça, ms oublies pas d'appeler les contructeurs (avec un new) de tes objets avant de stocker un pointeur vers une instance de l'objet.


 
Bah en fait pour l'instant je n'ai manipulé que des CList tout court, quel que soit le type que j'ai utilisé avec... Je crois même que je l'ai fait avec des CString, ce qui me fait me demander pourquoi j'ai eu l'idée de passer par les fonctions d'alloc/desalloc, alors que ces classes sont faîtes pour ça.
 
Donc je pense rester sur les CList, même si je pense que pour une chaîne de caractères CStringList est plus adapté.
 
A propos, quelle est la différence entre les classes en List et Array, grossièrement ?

sielfried

la viper a écrit a écrit :

bah si ton projet reste dans le MFC .. tu as CArray et CList .. ;)
 
ils peuvent accepter n'importe quel type de données.  




 
Arf oui effectivement... J'y ai même pas pensé :(
Bon ben je vais utiliser ça alors !
 
Cela dit s'il y a un moyen avec les fonctions "standard" d'allocation/reallocation, je veux bien qu'on me dise, ça pourrait tout de même servir ;)
 
Merci en tout cas  :jap:

El_gringo

BENB a écrit a écrit :

Attention aux Cstrings qui ne sont pas du C++, mais des composants MFC (preferer la string STL).  




 
Et c quoi les MFC si c pas du C++ !?? c'est d'la merde en boite !?
bon Dieu d'bon Dieu...
oups... g affaire à une demoiselle.
Pardon d'vous dire ça mam'selle BENB, mais les MFC, Microsoft Fondation Class, c du C++, tu veux que ça soit des classes écrites en quoi !? Avant de critiquer, est ce que t'as déja rencontré le moindre problème avec des CString !? j'en doute... alors quand on sait pas, on fait pas de l'anti-MFC-isme primaire !
 
Pour ce que tu veux faire, niveau des CString, t'as les CStringArray, sinon tu peut utiliser des CPtrArray qui te permet de stocker (dynamiquement) des pointeur vers tout ce que tu veux... Donc tu peut utiliser ça, ms oublies pas d'appeler les contructeurs (avec un new) de tes objets avant de stocker un pointeur vers une instance de l'objet.

la viper bah si ton projet reste dans le MFC .. tu as CArray et CList .. ;)
 
ils peuvent accepter n'importe quel type de données.
sielfried

la viper a écrit a écrit :

pkoi se compliquer la vie ?!?
 
y'a une classe qui existe et qui fait ca : CStringArray ou CStringList
 
voir plus d'info dans la MSDN  




 
Bah disons que CString n'était qu'un exemple, dans le cas de mon projet c'est surtout mes tableaux CClasseSocket (classe dérivée de CAsyncSocket) que je voudrais dynamiser.
 
Sinon merci des conseils  :jap:  
 
J'avais pensé à new(), mais sachant que la longueur du tableau doit être modifiée plusieurs fois dans le prog, j'ai tout de suite utilisé realloc, je ne savais pas (plus) qu'il n'appelait pas le constructeur de l'objet.
 
youdontcare : pour realloc, est-il utilisable après un new dans mon cas ? C'est gentil de me laisser chercher mais je connais rien d'autre que realloc dans le genre :D
 
Edit : hmmm j'ai peut-être une idée :D...

 

[edtdd]--Message édité par Sielfried--[/edtdd]

la viper pkoi se compliquer la vie ?!?
 
y'a une classe qui existe et qui fait ca : CStringArray ou CStringList
 
voir plus d'info dans la MSDN
BENB Le melange de C et de C++ n'est pas toujours bon...
les allocateurs dynamiques du C (calloc, malloc, realloc) ne peuvent pas instancier d'objet C++, ils allouent de la memoire, mais n'appellent pas les constructeurs des objets. De meme free n'appelle pas le destructeur des memes objets.
 
Comment faire : la solution la plus simple est d'utiliser les allocateurs/desalocateurs du C++ (new-new[]/delete-delete[]) qui eux appellent les constructeurs/destructeurs.
 
La solution la plus compliquee : utiliser les allocateurs du C, puis instancier les objets par un new localise...
 
Enfin tu peux aussi utiliser la STL qui te propose ce que tu cherches sous la forme d'un vector ou d'une list....
 
Attention aux Cstrings qui ne sont pas du C++, mais des composants MFC (preferer la string STL).
youdontcare tu ne peux pas faire de malloc pour utiliser les objets car dans ce cas le constructeur n'est pas appelé et la mémoire contient alors n'importe quoi.
 
donc CString* CStringTable;
numCStrings = ...;
CStringTable = new CString [numCStrings];
 
je te laisse chercher pour le realloc :D
sielfried C'est sûrement comme d'habitude une question de newbie que je pose, mais tant pis : j'ai appris le C++ sur un bouquin qui explique comment réaliser un tableau dynamique de types prédéfinis comme char ou int, mais apparemment cela ne marche pas sur les objets, ou sur les types d'objets que je veux utiliser.
 
Par ex., je voudrais faire un tableau de CString, qui s'agrandit à mesure que l'on saisit des chaînes :
 
Je fais :
 
int nbchaines = 0;
CString *chaine = NULL;
 
Puis à chaque chaîne :
 
nbchaines++;
chaine = (CString*)realloc(chaine, nbchaines*sizeof(CString));
 
(en vérifiant à chaque fois l'éventuelle erreur d'allocation mais ce n'est pas de là que vient le problème)...
 
Déjà, est-ce correct ? Avec du char** ça marche, c'est sûr, mais c'est plus chiant, puique CString permet directement de stocker des chaînes de longueur dynamique. Il n'y aurait donc plus que le nombre de chaînes à "dynamiser", ce serait vraiment pratique.
 
En fait jusque là cela marche, mais dès que j'essaie d'initialiser une chaîne (genre chaine[0] = "salutcava?" ), j'obtiens une erreur non conforme.
 
D'autre part dans le cadre de mon programme de chat, j'utilise aussi des objets CClasseSocket. J'avais fait un tableau de 1000 objets fixe (en fait ça correspond aux clients, c'est géré côté serveur) mais je trouverais ça beaucoup plus fin de le dynamiser en fonction du nombre de clients. Mais même problème que précédemment, impossible d'accéder au tableau par la suite.
 
Merci d'avance !

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR