Pb : tableau[ ][ ] de taille non déclaré dans une fonction - C++ - Programmation
Marsh Posté le 12-08-2004 à 02:02:24
bon alors en fait g la classe:
class Matrice{
private:
int nc,nl;
int num[MAXMATRICE][MAXMATRICE];
int den[MAXMATRICE][MAXMATRICE];
};
et je veux une fonction membre qui permette de mettre le tableau a[2][3] ou b[6][7] dans num (l'array donnée membre) ... comment on fait???
parce que la fonction est du genre :
void Matrice::aa(int a[][]){
num=aa;
}
mais ce #°§¢¬# d'argument de la fonction aa doit avoir sa deuxieme partie donc le [x] de a[][x] définit constant ...
Marsh Posté le 12-08-2004 à 02:11:17
Waouh g trouvé un truc vraiment tout con pour que ca marche, utilisé un tableau a une seule dimension ;-( pourquoi n'y est je pas pensé avant ...
Marsh Posté le 12-08-2004 à 07:43:27
Le passage d'un tableau C par copie n'existe pas. Un passage par pointeur est plus approprié -> (int* a).
Tu t'embetes bcp, un simple std::vector fera l'affaire. Il existe une classe matrice dans boost:: d'ailleurs.
Marsh Posté le 12-08-2004 à 08:14:18
xterminhate a écrit : Le passage d'un tableau C par copie n'existe pas. Un passage par pointeur est plus approprié -> (int* a). |
par référence ça marche très bien
Marsh Posté le 12-08-2004 à 12:28:13
euh pour la classe deja toute fait ca me dit rien parce que mon but c justement de faire la classe compléte!!!!
mais sinon par pointeur je n'arrive pas a comprendre comment ca marche avec un tableau a 2 dimensions ... si c t possible de me donner un ptit exemple!!!!
Marsh Posté le 13-08-2004 à 16:18:29
Ben ton pointeur est le début de ton tableau !
si tu as
int tab[4][4];
et une fonction
void ProcessTab( int* pTab );
tu appelles ProcessTab( tab );
c'est tout
et dans ta fonction, tu parcours le tableau à la main...
par example
for ( in i = 0 ; i < 4 ; i++ )
{
for ( int j = 0 ; j < 4 ; j++ )
tab+i*4+j te donne ton élément du tableau
}
Marsh Posté le 13-08-2004 à 16:26:55
et void ProcessTab( int (*pTab)[4] ); ?
Marsh Posté le 13-08-2004 à 17:16:55
void P..T..(int* pTab) est correct.
Marsh Posté le 13-08-2004 à 17:44:37
oui mais avec
void ProcessTab( int (*pTab)[4] );
(ou void ProcessTab( int pTab[][4] );
tu peux indexer le tableau en 2d
Marsh Posté le 13-08-2004 à 19:29:56
Ok. Par défaut, void F..T..( int p[][4] ) est plus simple.
Marsh Posté le 13-08-2004 à 19:43:23
A l'utilisation, c'est qd même plus pratique.
Marsh Posté le 13-08-2004 à 19:55:43
Quelle différence, entre quoi et quoi ?
Marsh Posté le 13-08-2004 à 20:08:20
c'est pas un passage par référence, ce que j'ai filé en dernier ? On m'aurait menti ! J'aurais dit aucune différence...
Marsh Posté le 13-08-2004 à 22:22:25
xterminhate a écrit : c'est pas un passage par référence, ce que j'ai filé en dernier ? On m'aurait menti ! J'aurais dit aucune différence... |
Citation : void ProcessTab( int (*pTab)[4] ); |
pointeur...
Marsh Posté le 13-08-2004 à 23:26:34
Une chose est sure, je me melange les pinceaux... j'aurais mieux fait de me taire Le passage par référence d'un tableau s'ecrit comment alors ?
Marsh Posté le 13-08-2004 à 23:41:33
comme ca ?
Code :
|
Marsh Posté le 14-08-2004 à 01:14:53
Sans doute, je n'ai pas trouvé d'ecriture sans le typedef.
Marsh Posté le 14-08-2004 à 03:20:03
ouai en fait comme on doit utiliser le
tab+i*4+j
ben c comme si on avé un tableau a une dimension que l on transformé en 2 dimensions, ce que j ai fait, c juste une autre forme mais ca doit avoir de l'interet pour autre chose lol !! merci en tout cas o moins g une autre solution!
Marsh Posté le 14-08-2004 à 04:41:57
void fonction(type (&tab)[dimension]);
Marsh Posté le 14-08-2004 à 09:55:11
Ok, merci.
Marsh Posté le 14-08-2004 à 19:12:30
Code :
|
le mieux c'est encore de fournir toutes les versions. ici le calcul de la moyenne pour un vecteur et une matrice. on a les versions classiques à base de pointeur et les versions template qui permettent une syntaxe d'appel naturel. tout ça dans le but déviter de générer une définition pour chaque (N,) ou (N, M)
Marsh Posté le 21-08-2004 à 11:27:28
tvmet et zou ....
Marsh Posté le 21-08-2004 à 11:30:40
carrément, mais déjà que la plus part son pas près pour boost ... quoi que tu commences à t'y mettre
Marsh Posté le 25-08-2004 à 02:28:05
Code :
|
evidement avec ma chance ca marche pas...
bon comment je peux faire tout bétement en ayant une class Fr et une Matrice???
Code :
|
ca s'utilise comment???
Merci encore...
Marsh Posté le 25-08-2004 à 02:56:30
ARRRGh... lol... ca va faire plus de 4h que je suis bloquer sur ce probleme
Marsh Posté le 25-08-2004 à 17:25:52
s += mean(&a[i * m], m);
=> tous les compilos implémentent les tableaux a plusieurs dimensions comme ca ?
( case1.1, case1.2, case1.3, case2.1, case2.2, case2.3 )
Marsh Posté le 25-08-2004 à 17:55:45
oui, je ne vois pas comment il pourrait en être autrement. réfléchis y (contiguité mémoire et ordre)
Marsh Posté le 25-08-2004 à 17:58:17
En Fortran, c'est le premier indice qui s'incrémente en premier.
Marsh Posté le 25-08-2004 à 20:48:18
là n'est pas la question. mais vu les propriétés d'un tableau en C++ il ne pourrait en être autrement
Marsh Posté le 12-08-2004 à 01:11:55
en fait g deja demandé ca, mais on ma répondu d'utiliser les pointeurs :
je cherche a faire ca :
int a[4][5]={...etc...}
int fonction(a){}
et je veux ne pas a avoir a donné la taille du tableau dans la fonction... car il faut toujours donner genre a[][56] et je veux que ca marche avec un tableau de n importe quel grandeur pas forcement 5... et surcharger la fonction c'est un peu con ...
en fait mon but est de simplement remplir un tableau existant (vide et faisant parti des données membres d'une classe) par un remplis...
mici