Utilisation d'un tableau dynamique - C++ - Programmation
Marsh Posté le 04-12-2002 à 11:09:38
Alors, ta ligne, ça serait plutôt ceci :
Code :
|
Car malloc rend un pointeur vers un élément de type non défini (void*), il faut caster explicitement.
Mais ce que tu fais là, c'est du C, pas du C++.
En c++, j'penses que tu peux faire :
Code :
|
Marsh Posté le 04-12-2002 à 11:15:49
Merci El_Gringo, je test ca des que je peux !
En fait, c dbien u C, pas du C++... Ca ca sera une autre histoire ds qques semaines je pense
Marsh Posté le 04-12-2002 à 11:19:16
Le C++ est pas forcément plus dur
C'est plus souple souvent, comme dans le cas présent. Aavec visual, tu pourras compiler ce que je t'ai dit QUE si ton fichier source est un .cpp (si c un .c, Visual utilise le compilateur C, et en C, ça n'existe pas ce que je t'ai dit !
Marsh Posté le 04-12-2002 à 11:42:32
oui, dans mon projet, le fichier est un .cpp
C une application win32 console de type "hello world".
Je connais pas les autres, les premiers cours de C ont eu lieu ya à peine 2 semaines...
Marsh Posté le 04-12-2002 à 15:23:00
...sauf si tu optes pour la solution avec le "new", auquel cas il faudra plutot faire un delete[]
Marsh Posté le 04-12-2002 à 15:45:45
Taz@PPC a écrit a écrit : euh c'est du C donc le cast est pas nécessaire |
tu parles du cast du malloc ?
Marsh Posté le 04-12-2002 à 16:13:21
Taz@PPC a écrit a écrit : oui. en C les cast void*<=>T* sont implicites en C++ seul T*=>void* l'est |
Alors pourquoi tous les bouquins conseillent de caster, y compris (et surtout) le merveilleux K&R ?
Si les auteurs du langage eux mêmes recommandent de caster, je vois mal pourquoi il ne faudrait pas le faire !
A moins que le cast de void* vers T* soit implicite depuis une révision récente du C ?
Marsh Posté le 04-12-2002 à 16:20:50
et bien il l'est. on cast juste par habitude et de toutes facons il vaut mieux toujours caster, c'est plus propre
essaye ca avec ton compilo C
Code :
|
c'est bon en C89/90, en C99, mais pas en C++.
je t'assure
Marsh Posté le 04-12-2002 à 18:07:08
Juste un truc, ce serait pas plutôt ça les bonnes lignes de code:
Code :
|
Car sizeof(adr) équivaut à sizeof(long*) et non à sizeof(long), non?
Marsh Posté le 05-12-2002 à 02:20:41
Il voulait mettre *adr.
Ça a l'avantage de suivre automatiquement les changements de type éventuels de adr.
Ça à l'inconvénient d'allouer trop pour un char* en C. En effet:
Code :
|
C'est une scorie que le C++ corrige.
Pour la contourner, j'utilises une macro:
Code :
|
Le cast void* vers T* risquant de devenir déprécié, il est recommandable de caster le malloc.
Je recommande de recourir à une macro qui rend le code plus simple, plus clair, plus sûr et centralise les changements éventuels:
Code :
|
Malheureusement, ça ne marche pas avec les types composés de tableau/fonction.
Marsh Posté le 05-12-2002 à 08:22:24
C bon, tout fonctionne !
G reussi a terminer le projet même
(Y'avait pas que la déclaration d'un tableau dynamique hein )
a tous !
Marsh Posté le 05-12-2002 à 09:16:22
Taz@PPC a écrit a écrit : oui. en C les cast void*<=>T* sont implicites en C++ seul T*=>void* l'est |
Sauf que dans son cas, il écrit son code C dans un fichier dont l'extention est "cpp" (.cpp), du coup, Visual compile son truc avec son compilateur C++, d'où le cast obligatoire ds son cas j'imagine...
Marsh Posté le 05-12-2002 à 10:12:51
El_Gringo a écrit a écrit : Sauf que dans son cas, il écrit son code C dans un fichier dont l'extention est "cpp" (.cpp), du coup, Visual compile son truc avec son compilateur C++, d'où le cast obligatoire ds son cas j'imagine... |
oui, mais il cherche vraiment la merde
Marsh Posté le 05-12-2002 à 17:57:59
bah non, c les outils qui sont mis a notre disposition, on est obligé de faire avec ...
Maintenant, c vrai (Apres certains exemples trouvés en faisant des // depuis le bouquin de C que g acheté) que c un peu la merde.
Mais pas le choix, faut faire avec ce qu'on a
Marsh Posté le 06-12-2002 à 09:37:29
JBs a écrit : bah non, c les outils qui sont mis a notre disposition, on est obligé de faire avec ... |
Non, mais, si tu veux faire du C, nomme tes fichier avec l'extention "c", pas "cpp". Comme ça t'utilisera le vrai compilateur C...
Marsh Posté le 04-12-2002 à 10:40:38
Salut à tous, je debute en C.
Je dois déclarer un tableau qui aura une taille variable en fontion des données saisies par l'utilisateur.
Par exemple : tab[longueur] (ou longueur est un entier).
J'utilise visual C++.
Il renvoi une erreur systematiquement me disant que longueur n'est pas definit lors de la compilation (ce qui est normal quoi).
G donc essayé ceci par la suite :
long *adr;
adr = malloc(longueur*sizeof(adr));
J'ai encore le droit à une erreur lors de la compilation :
C:\Program Files\Microsoft Visual Studio\MyProjects\test\test.cpp(56) : error C2440: '=' : cannot convert from 'void *' to 'long *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Est ce que qqun saurait m'aider ?
Merci d'avance !