IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

problème de const dans une classe


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 39
    Par défaut problème de const dans une classe
    Bonjour à tous et à toutes,

    Dans le cadre d'un projet je suis amené à utiliser une méthode de type RungeKutta d'ordre 4 (pour cela je fais appelle à des fonctions de types const). Dans ces fonctions je fais appelle à un paramètre qui doit venir de ce qu'un utilisateur doit entrer une vitessse qui est utilisée dans la fonction en question. c'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static double f1(double t, double theta1, double theta2, double theta3, double phi1, double phi2, double phi3)
            {
                return (1 / (d * r)) * (d * Math.Cos(phi1) * Vx + d * Math.Sin(phi1) * Vy + (-d * (l / 2) * Math.Sin(phi1) + a * d * Math.Cos(phi1)) * DotAlpha);
            }
    Or si je veux utiliser cette fonction il faut que Vx soit constant et non pas variable ... Pourriez vous m'aidez car je me débrouille un peu mais je ne suis plus un spécialiste du C#.

    Merci d'avance, et si je n'ai pas été très clair faite le moi savoir

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    J'ai pas trop compris... ça vient d'où Vx ? soit c'est l'utilisateur qui le saisit, et dans ce cas ce n'est pas constant (à moins qu'il saisisse toujours la même valeur...), soit c'est une constante prédéfinie, et dans ce cas tu le déclares comme un champ const de ta classse

  3. #3
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    +1 avec tomlev. c'est pas constant si c'est pas défini au moment de la compilation (car cela entraine un mecanisme bien spécifique, encore plus avec des assemblies satellites).

    une variable readonly ne te conviendrait-elle pas mieux?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 39
    Par défaut
    Merci d'abord pour vos réponses rapides. En fait, j'ai bien compris qu'il fallait que si je dois définir une variable constante je dois immédiatement la définir. Cependant le terme Vx en question peut varier (et C'est là tout le problème) selon le souhait de l'utilisateur. Du coup, si Vx est une valeur prise de l'IHM (non constante) alors je en peux pas définir mes fonctions statiques (pour la résolution du système d'équation) . et c'est là tous mon problème. Ca fonctionne de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      // the dynamic constance of the robot
            const double Vx = 1;
            const double Vy = 0;
            const double DotAlpha = 0;
     
            //-------------------------------------------------------------------
            //----------------------------------- function of motion laws --------
            //-------------------------------------------------------------------
            public static double f1(double t, double theta1, double theta2, double theta3, double phi1, double phi2, double phi3)
            {
                return (1 / (d * r)) * (d * Math.Cos(phi1) * Vx + d * Math.Sin(phi1) * Vy + (-d * (l / 2) * Math.Sin(phi1) + a * d * Math.Cos(phi1)) * DotAlpha);
            }
    Mais des que je l'enlève les const ... Ca ne fonctionne plus ce qui est normal vu que ma fonction est en mode "static" et je ne vois pas comment contourner ce problème....

    Lorsque j'utilise "readonly" (ou quand je n'utilise pas le terme "const") un message du type suivant apparait:
    Une référence d'objet est requise pour la propriété,la méthode ou le champ non statique
    Merci

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    et pourquoi ta méthode est statique dans ce cas si elle contient des éléments qui peuvent varier?

    ne la met pas static ou alors, fais en sorte que Vx soit passée en paramètre à cette méthode (et non pas directement dans son corps). Ainsi, à un autre endroit de ton code, tu déclares const Vx =1;
    et Vx2 = choix de l'utilisateur.
    et tu appelles ta méthode, en passant soit la valeur par défaut, soit la valeur définie.

    suis-je bien clair? (j'en suis pas sûr ^^)

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    J'ai pas trop compris...
    Moi non plus,

    Les variables aussi peuvent être "static":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class MaClasse 
    {
      public static double Vx = 1;
      public static double f1
     ...
    }
     
    Maclasse.Vx=123;
    Maclasse.f1( ...

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    et pourquoi ta méthode est statique dans ce cas si elle contient des éléments qui peuvent varier?
    Je crois simplement que dronix n'a pas assimilé le concept de variables de classes vs variables d'instance en C#.

    @Dronix: Si tu déclares une méthode en static, c'est une méthode de classe. Elle ne peut donc pas accéder à des membres d'instance sans spécifier l'instance de l'objet en paramètre... Ou alors le plus simple, tu accèdes à des données de classes (static/const) comme l'as dit Graffito.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Initialisation const dans une classe fille
    Par cyberjoac dans le forum C++
    Réponses: 3
    Dernier message: 07/10/2007, 17h53
  2. Problème de setInterval dans une Classe
    Par jeremie74 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 21/08/2007, 19h45
  3. static const dans une classe ?
    Par hpfx dans le forum C++
    Réponses: 7
    Dernier message: 15/08/2007, 15h06
  4. Problème Access Violation dans une classe
    Par randriano dans le forum C++Builder
    Réponses: 1
    Dernier message: 11/04/2007, 18h49
  5. problème d'accès dans une classe dérivée!
    Par chrono23 dans le forum C++
    Réponses: 47
    Dernier message: 10/10/2006, 11h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo