cs_nat38
Messages postés4Date d'inscriptionsamedi 27 décembre 2003StatutMembreDernière intervention27 décembre 2003
-
27 déc. 2003 à 12:34
cs_nat38
Messages postés4Date d'inscriptionsamedi 27 décembre 2003StatutMembreDernière intervention27 décembre 2003
-
27 déc. 2003 à 14:51
Bonjour,
Je suis en train de créer un programme permettant de tracer des rayons optiques à travers plusieurs lentilles. Pour cela, j'ai créé 2 classes: une classe Lentille (qui fait les calculs pour une seule lentille) et une classe Systeme (qui fait les calculs pour toutes les lentilles). Ce sont des calculs matriciels. J'ai une erreur de déclaration de calsse, mais je ne comprends pas d'où elle vient...
Voici la déclaration de la classe Lentille:
class Lentille
{
float FocaleLentille;
float DistanceObjet;
erreur affichée:
c:\documents and settings\propriétaire\bureau\istase\projet info\versionsofiane\lentille.h(6) : error C2011: 'Lentille' : 'class' type redefinition
Error executing cl.exe.
Pourquoi s'agit-il d'une erreur de redéfinition?
Dans Lentille.cpp, je declare: #include "Lentille.h"
La classe Systeme hérite de la classe Lentille, je déclare donc: #include "Lentille.h"
Voici le code de Lentille.cpp:
Lentille::Lentille()
{
float FocaleLentille=(float)0.1;
float Diametre=(float)0.2;
float PositionObjet=0;
float TailleObjet=0;
}
Lentille::~Lentille()
{
}
float Lentille::Vergence(float& V)
{
FocaleLentille=(float)0.1;
V=1/FocaleLentille;
cout<<"La vergence est: V= "<<V<<endl;
return V;
}
float Lentille::MatriceTransfert(int n, int m)
{
float MF[2][2];
float MT[2][2],MR[2][2];
int i,j,k;
for (i=0;i<2;i++)
{
for (j=0;j<2;j++)
{
MF[i][j]=0;
for (k=0;k<2;k++) MF[i][j]+=MT[i][k]*MR[k][j];
}
}
for (i=0; i<2; i++)
{
for (j=0; j<2; j++)
{
cout<<MF[i][j];
cout<<endl;
}
}
return MF[n][m];
}
cs_nat38
Messages postés4Date d'inscriptionsamedi 27 décembre 2003StatutMembreDernière intervention27 décembre 2003 27 déc. 2003 à 13:33
autre probleme concernant la classe systeme:
Il s'agit de calculer une matrice de transfert totale(tableau 2*2) à partir des matrices de transfert(MF) de chacunes des lentilles.
Voici la déclaration dans le .h:
float MatriceTransfertTotale(int N, float MF[2][2]);
Dans le .cpp:
float Systeme::MatriceTransfertTotale(int N, float MF[2][2])
{
float ML[2][2]; //déclaration d'une matrice temporaire
int i,j,k,l,m,n;
MF[0][0]=1; //initialisation de la matrice de transfert
MF[0][1]=0;
MF[1][0]=0;
MF[1][1]=1;
for(l=0; l<20; l++) // boucle sur les lentilles
{
for(m=0; m<2; m++) //remplissage du tableau par les matrices de transfert
{
for(n=0; n<2; n++)
{
TabLentilles[i]=lent1.MatriceTransfert(n,m);
i=i+1;
}
}
l=l+4;
}
for (i=0;i<2;i++) //MatriceTransfert totale = Matrice Transfert * MatriceTransfert
{
for (j=0;j<2;j++)
{
for (k=0;k<2;k++) MF[i][j]+=MF[i][k]*ML[k][j];
}
}
return MF[i][j];
}
Dans le main:
S.MatriceTransfertTotale(N,MF[2][2]);
Erreur affichée au niveau du main:
error C2664: 'MatriceTransfertTotale' : cannot convert parameter 2 from 'float' to 'float [][2]'
There is no context in which this conversion is possible
Pourquoi ne veut-ilpas me ressortir un tableau 2*2?
J'en ai besoin pour d'autres calculs ultérieurs. D'où peut provenir cette erreur?
Merci de m'aider...
;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
MoDDiB
Messages postés546Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention 4 mai 20071 27 déc. 2003 à 13:42
float MatriceTransfertTotale(int N, float MF[2][2]);
tu demande de recevoir en 2eme expression un tablo de type float a 2 dimension.
Pour l'envoyer il ne faut pas le "redeclarer"
comme tu as fais avec MF[2][2]
mais plutot lancer un pointeur vers
S.MatriceTransfertTotale(N,MF);
En gros l'erreur vient de la il faudra peut eter changé float MF[2][2] dans ta fonction par float *MF mais bon essaye comme j'ai deja dis c'est plus facile quand on peut compiler pour comprendre ^^