URL: https://linuxfr.org/forums/programmation-c/posts/probleme-avec-une-methode-virtuelle Title: probleme avec une methode virtuelle Authors: sim12 Date: 2005年04月27日T19:38:59+02:00 Tags: Score: 0 bonjour, pour un projet, le prof nous a donné une librairy .lib pour windows. cette librairy sert à resoudre des equations differentielles du 1er et 2eme ordre et autres... j'essaye de coder une "fonction" permettant de resoudre les ED comme ca je pourrais utiliser mon programme plus facilement sous linux... le PROBLEME: je definis une classe EquaDif avec une methode virtuelle F1AInteger qui est surchargée dans une classe fille(en fait arriere petite fille) circuit_a . Mais jutilise F1AInteger dans une methode Integre1erOdre de EquaDif, ce qui pose des probleme au compilateur... Auriez vous une solution??? merci voila les .h: class EquaDif{ protected: float LowerLimit; //limite inférieure t0 d'intégration float UpperLimit; //limite supérieure d'intégration int NumReturn; //nombre de points de retour int NumIntervals; //nombre d'intervalles d'intégration TNVector8 TValues; //résultat (tableau de 100 valeurs) TNVector8 XValues; //résultat public: virtual float F1AIntegrer(float t, float x); //fonction du premier ordre à intégrer //fonction virtuelle qui doit être surchargée EquaDif(); //initialise les conditions d'intégrations nulles ~EquaDif(); char Integre1erOrdre(float xi); //intègre l'équation x'=F1AIntegrer(t,x) //(xi est la valeur de x(t0)) void SoitCondIntegration(float ll,float ul,int nr,int ni); //fourni les conditions d'intégration void DonneResultats(TNVector8 &t, TNVector8 &x); //délivre ldes résultats sous forme de tableaux }; class circuit : public EquaDif {protected : float vs; source *s; public : float signal(float t); virtual int integre()=0; circuit(); ~circuit(); void change_source(source *s); }; class cordre1 : public circuit {protected : float x0; public : int integre(); cordre1(); ~cordre1(); }; class circuit_a : public cordre1 {protected : float r1,c1; public : float F1AIntegrer(float t,float x); void dcircuit_a(float res1,float cond1); circuit_a(); ~circuit_a(); }; voila les .cpp: char EquaDif::Integre1erOrdre(float xi){ int i; float p1,p2,p3,p4; float h; TValues[0]=LowerLimit; XValues[0]=xi; h=(UpperLimit-LowerLimit)/NumIntervals; for(i=0;i<=NumIntervals;i++){//methode de Runge-Kutta p1= F1AInteger(TValues[i],XValues[i]); p2= F1AInteger(TValues[i]+h/2,XValues[i]+h/2*p1); p3= F1AInteger(TValues[i]+h/2,XValues[i]+h/2*p2); p4= F1AInteger(TValues[i]+h,XValues[i]+h*p3); TValues[i+1]=TValues[i]+h; XValues[i+1]=XValues[i]+h/6*(p1+2*(p2+p3)+p4); }; }; et F1AInteger est surchargée comme ca: float circuit_a::F1AIntegrer(float t,float x) {return (-x/(r1*c1)+(*s).signal(t)/(r1*c1));}; et Integer1erOrdre est utilisée dans: int cordre1::integre() {cout<<"Entrer la condition initiale sur x : "; cin>>x0; return(Integre1erOrdre(x0)); }; merci