Halicorne
Messages postés2Date d'inscriptionmercredi 1 mars 2006StatutMembreDernière intervention24 mai 2008
-
23 mai 2008 à 23:41
Halicorne
Messages postés2Date d'inscriptionmercredi 1 mars 2006StatutMembreDernière intervention24 mai 2008
-
24 mai 2008 à 10:19
Salut à tous,
J'ai quelques soucis avec la gestion des pointeurs en C# :
voici le code que je désire gérer :
using System;
namespace ltest
{
public class test
{
static unsafe ltest.test* root; // racine
string str; // string
unsafe ltest.test* right; // pointeur de droite
unsafe ltest.test* left; // pointeur de gauche
Le code ne compile pas : [Task:File=/ltest/ltest/Main.cs, Line=10, Column=33, Type=Error, Priority=Normal, Description=Cannot take the address of, get the size of, or declare a pointer to a managed type `ltest.test'(CS0208)]
Malgré tous mes efforts, j'ai du mal à comprendre pourquoi (l'option autoriser le code non sur est activée).
Merci de votre aide.
Halicorne.
Pas de projection, c'est ici et maintenant que se font les choses !!!
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 24 mai 2008 à 09:01
Salut,
Comme le dit le lien de coq, l'arithmétique des pointeurs n'est pas permises avec les types managés. Pour ma part, je pense que l'unsafe a été conservé en C# pour tout ce qui est accès en mémoire de type "données", pour les streams, les buffers, etc...
Mais que, comme le traduit ton erreur, on ne devrait pas utiliser ces pointeurs pour manipuler des objets.
Mon avis est qu'il est possible de (à peu près allez...) tout faire (des choses conventionnelles disons...) avec ce que nous propose C# sans l'arithmétique de pointeurs, et que tu devrais repenser ton code, mais je peux me tromper...
J'ai l'impression en regardant ton code, que tu as déclaré tous tes objets membres de type "test" en tant que pointeur comme on l'aurait fait en C++. Sais-tu qu'en C#, toute déclaration d'objet est faite nativement par référence ?
Donc déclarer
Object* myObject; //En C++
Revient à déclarer
Object myObject; //En C#
Pardonne moi de paraitre "trop didactique" si tu es déjà au courant de toutes ces choses, on ne sait jamais sur qui on tombe, avec quelle expérience, sur le forum après un message
Halicorne
Messages postés2Date d'inscriptionmercredi 1 mars 2006StatutMembreDernière intervention24 mai 2008 24 mai 2008 à 10:19
Merci beaucoup pour vos conseils avisés.
En fait, je cherchais à pouvoir (comme en C ou C++) affecter les attributs left ou right (pointeurs d'instances) d'une structure/classe locale à une fonction, qui pointerait sur une variable existant ailleurs que dans le bloc.
J'ai trouvé la solution sans utilisation de l'option unsafe :