alonsyl
Messages postés348Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 6 novembre 2008
-
9 mai 2005 à 14:38
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
9 mai 2005 à 16:19
Bonjour,
Je travaille en Visual Basic et j'essaie de créer une DLL C++ afin d'effectuer du calcul matriciel. Pour l'instant, je commence petit avec la transpostion d'une matrice.
"tableau" et une matrice définie en VB dont le nombre de lignes est "nblignes" et le nombre de colonnes est "nbcolonnes".
Lorsque je compile ma DLL, Visual C++ me signale des erreurs sur les lignes "double sortie[lignes][colonnes];" et "sortie[j][i] = tableau[i][j];".
void __stdcall transpose(double *tableau, int nblignes, int nbcolonnes)
{
const int lignes = nbcolonnes;
const int colonnes = nblignes;
double sortie[lignes][colonnes];
int i, j;
for (i = 0; i < nblignes; i++)
{
for (j = 0; j < nbcolonnes; j++)
{
sortie[j][i] = tableau[i][j];
}
}
}
cs_thedestiny
Messages postés56Date d'inscriptionsamedi 3 juillet 2004StatutMembreDernière intervention30 juin 2008 9 mai 2005 à 16:09
Cette ligne est génante effectivement
sortie[j][i] = tableau[i][j]
tableau n'est qu'un double* donc il ne peut pas avoir deux dimension :
void __stdcall transpose(double **tableau, int nblignes, int nbcolonnes)
Cela rendra les types compatibles :)
Pour le cas de
"double sortie[lignes][colonnes];
la définition n'est bonne, fait un double **sortie ( je ne sais pas si il y a d'autre solution mais c'est celle qui me vient à l'esprit et qui me semble être la bonne )
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201013 9 mai 2005 à 16:09
lignes et colonnes on beau être déclaré en const int, ce sont quand
même des variables donc la valeur n'est pas connue à la compilation.
Pour cette raison tu ne peux pas les utiliser pour indiquer la taille
d'un tableau. Tu dois donc faire de l'allocation dynamique.
Dans l'état actuelle, ta fonction ne servairait à rien (sortie n'est
pas utilisé). Si c'est tableau que tu veux modifier directement, tu n'a
pas besoin de sortie, il te suffit de faire comme ca:
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201013 9 mai 2005 à 16:19
Effectivement en plus tableau n'est pas bien typé.
Pour la deuxième partie de ma réponse, je pense que ca ne marchera que pour des matrices carrées donc ca ne résoud peut être pas ton problème. Dans ce cas fait de l'allocation dynamique comme j'avais dit, par exemple avec HeapAlloc, mais le prototype de ta fonction n'est plus bonne car tu ne rends pas de résultat