olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
9 févr. 2008 à 10:11
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 2012
-
9 févr. 2008 à 13:12
Bonjour,
Je sais que bidou va encore me dire de faire de la speleo essai / erreur sur MSDN mais c'est tellement plus rapide et convivial qsuand on peut partager l'experience des autres !!
J'essaye de comprendre le message ci dessous provoqué par la compilation du code un peu blus bas.
Error 1 An object reference is required for the nonstatic field, method, or property
'BCGeo.BCGEO_C.DistWGS(BCGeo.TS_POINT, BCGeo.TS_POINT)'
Et deduire ce que je dois faire ou j'aurais du faire pour l'eviter !!
Explication : j'ai transposé une de mes sources en C pur, la fonction originale utilisait un pointeur sur sructure de type TS_POINT, redéfinie ci dessous;
j'ai créé un namespace et une classe pour pouvoir utiliser une jeu de fonction géographique dans différent projets.
Ci dessous; en vert l'essentiel de ma classe
en bleu l'appel de la fonction dans mon projet
Je recoit l'erreur ci dessus
- dois je changer qquelque chose dans ma classe
- dois je changer l'appel ?
namespace BCGeo
{
public struct TS_POINT
{
public int X;
public int Y;
};
public class BCGEO_C
{
public int DistWGS(TS_POINT A, TS_POINT B)
{
return dist;
}
}
}
bidou_01
Messages postés134Date d'inscriptiondimanche 1 octobre 2006StatutMembreDernière intervention19 mai 20081 9 févr. 2008 à 10:22
Hello,
Ton erreur vient du faite que tu appelles la méthode "public int DistWGS(TS_POINT A, TS_POINT B)"
comme une méthode statique : dX = BCGEO_C.DistWGS(pa, pb);
Or ta méthode n'est pas statique.
Soit tu rajoute le mot clé static : public static int DistWGS(....); , ainsi tu conserve ta syntaxe d'appel de la méthode!
Soit tu instancies un objet de type BCGEO_C pour appeler ta méthode :
BCGEO_C objet = new BCGEO_C();
objet.DistWGS(monPt1,monPt2);
PS : et s'il m'arrive de renvoyer sur la MSDN c'est parce qu'on apprend toujours plus par soi-même, mais avec des pistes de recherche ;). Un code pondu ne sert à rien !
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 9 févr. 2008 à 10:28
bidou_01> Sur le forum, Bidou, c'est moi, pas toi
olibara> Pour les struct C#, je tiens à te signaler (au cas où tu ne le saurais pas) qu'elles n'ont rien avoir avec les struct en C !
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 9 févr. 2008 à 10:42
Merci
Personellement la declaration statique me semble plus simple
C'est une collection de fonctions de calcul et de definition de structures appropriées ?
Quel serait l'avantage de l'instancier plutot que de tout déclarer statique ?
N.B : rassure toi j'aime apprendre par moi meme mais le vite possible et dans ce cas l'avis avisé de quelqu'un permet de degager les pistes beaucoup plus efficacement.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 9 févr. 2008 à 10:45
le mot clef statique va à l'encontre du paradygme de la programmation orienté object, et il faut donc l'utilisé partimonieusement et pas à tord la rigole...
Si tu dois faire une classe "Utility", alors oui, une classe static (qui ne peut contenir que des membres static) peut être une bonne solution...
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 9 févr. 2008 à 10:47
Pour ce qui est des structs C#, il faut savoir que c'est des value type qui sont donc stocké sur le stack et pas sur le heap. Si tu travailles avec des collections, ou dans des cas ou y'a beaucoup de boxing/unboxing, tu risques d'avoir des problèmes de performances...