cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 23 juil. 2004 à 21:49
Matrice& operator = (const Matrice &);
dur à voir, c'est canonique, le compilo cherchait cette declaration pour l'operateur interne d'affectation
il te manque aussi le constructeur par defaut, et ca c'est tres important, a partir du moment ou tu redefini un constructeur, tu doit redefinir egalement celui par defaut (sans parametre)
ca peut etre aussi bien
Matrice();
que
Matrice( int 5, int 5, int = 0);
cs_shen
Messages postés17Date d'inscriptiondimanche 29 décembre 2002StatutMembreDernière intervention16 août 2004 23 juil. 2004 à 21:23
c ok!
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 23 juil. 2004 à 21:20
comment tu as declaré l'operateur = ?
met à jour le zip pour voir
cs_shen
Messages postés17Date d'inscriptiondimanche 29 décembre 2002StatutMembreDernière intervention16 août 2004 23 juil. 2004 à 21:04
djl > j'ai rajoute l'operateur = comme tu m'avais dir mais j'ai un prob...quand j'ecrit par exemple pour deux matrices a et b :
a a+b, ou a a*b....
c'est cette erreur a la compilation :
no match for 'Matrice& = Matrice' operator.
par contre si j'ecrit : a = b;
c'est correct...
??? bizarre, j'ai pourtant bien les bons operateurs definis...
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 23 juil. 2004 à 20:48
pense aussi à utiliser un type non signé ou un size_t pour les dimensions, c'est fait pour
class Matrice
{
public:
typedef std::size_t size_type;
...
private:
size_type N, P;
Matrix XxMatrice;
};
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 23 juil. 2004 à 20:45
si tu compte utiliser des cin (iostream) vau mieux pas que ce soit une fonction membre (pour les memes raisons que pour display)
le plus simple c'est des constructeurs prenant en parametres des tableau, des vector, des valarray... pour permettre diverses initialisations
par exemple
Matrice( int, int, double *);
cs_shen
Messages postés17Date d'inscriptiondimanche 29 décembre 2002StatutMembreDernière intervention16 août 2004 23 juil. 2004 à 20:41
j'ai pas encore terminé! si vous regarde dans les fonctions membres, certaines ne sont pas encore implementees. La fonction qui permet de remplir une matrice avec les valeurs de l'utilisateur est Matrice::GetMatrice().
Ceci dit, il est preferable d'en faire une fonction membre ou non, c'est a dire d'entrer les valeurs a l'initialisation?
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 23 juil. 2004 à 19:13
a oui c'est vrai, ca rend ta classe peu fonctionnel
rajoute des constructeur permettant l'initialisation
Iwin
Messages postés24Date d'inscriptionsamedi 29 mars 2003StatutMembreDernière intervention23 juillet 2004 23 juil. 2004 à 14:05
Euh, c'est cool mais comment tu fais pour initialiser une matrice avec les valeurs que tu veux ?
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 23 juil. 2004 à 08:03
shen > kirua te l'a bien expliquer, si tu veux afficher ta matrice dans la console, utilise cout, mais il faut que ce soit separé de ton module (dans une fonction externe à ton module)
sinon tu limite gandement les possibilité d'utilisation de ton module
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 23 juil. 2004 à 01:54
shen > il y en a beaucoup de texte devant toi en ce moment et pourtant pas l'ombre d'une console.
Evite de penser console systematiquement, a part pour du debug comme dit Kirua, on en voit plus trop l'utilite.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 23 juil. 2004 à 00:58
ben, justement, dans un moteur 3D tu t'en ficherais pas mal d'afficher la matrice dans la console (sauf pr le débuggage), puisque ce qui t'intéresserais ne serait pas le contenu de la matrice (pr une résolution de problèmes, comme une calculatrice), mais bien son utilisation pratique interne au moteur (calcul des perspectives, de la lumière etc, ça me dépasse de tte façon, mais je sais que ça trouve un usage là dedans), et pour cela tu n'aurais besoin à aucun moment d'afficher le contenu de la matrice, et c'est pr cela qu'il est bien d'isoler cette fonction du module, tt en le rendant "activable" à la compilation, soit pr débug, soit pr l'utilisation première que tu en as je suppose, qui est le calcul matriciel en tant que tel.
cs_shen
Messages postés17Date d'inscriptiondimanche 29 décembre 2002StatutMembreDernière intervention16 août 2004 23 juil. 2004 à 00:53
dans ce cas, comment faire pour afficher du texte sans utiliser iosream?
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 23 juil. 2004 à 00:49
le truc d'éviter l'utilisation de la sortie standard dans un module, c'est que tu n'utiliseras pas forcément ta classe dans un programme qui en fera usage (de la sortie console), et que donc ce serait dommage de devoir inclure la bibliothèque iostream ds ton programme pour pvr utiliser la classe de matrices, sans en avoir l'usage (parce que iostream bouffe plein de place ds l'exe).
cs_shen
Messages postés17Date d'inscriptiondimanche 29 décembre 2002StatutMembreDernière intervention16 août 2004 23 juil. 2004 à 00:45
merci djl pour tes commentaires, tres utiles.
sinon, j'ai pas tres bien comprit la subtilite qui fait que l'utilisation de "std::cout" n'est pas conseille pour l'affichage. Pour un moteur 3D, c'est ok, sinon....pourquoi?
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 23 juil. 2004 à 00:35
faudrait calculer les déterminants et les rangs, et ça serait encore mieux ^^
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 22 juil. 2004 à 23:56
pour un debut c'est bien
delete[] XxMatrice; et pas delete XxMatrice; sinon ca fuie
et si tu rajoute l'operateur =, ta classe sera vraiment securisée
pour la methode display, elle necessite std::cout de iostream et ca peut etre genant, surtout pour un moteur 3d ou ca n'a rien à faire
met la en inline et fait generer le code seulement si iostream est inclu
// dans le corps
#ifdef _CPP_IOSTREAM
inline void Display() ;
#endif
// dans le fichier .hpp, apres le corps
#ifdef _CPP_IOSTREAM
inline void Matrice::Display()
{
for(int i=0; i #include <ctime> et non time.h
a par ca je trouve que c'est bien codé, surtout si tu debute
j'avaiss deja posté une classe matrice generique si ca t'interesse
23 juil. 2004 à 21:49
dur à voir, c'est canonique, le compilo cherchait cette declaration pour l'operateur interne d'affectation
il te manque aussi le constructeur par defaut, et ca c'est tres important, a partir du moment ou tu redefini un constructeur, tu doit redefinir egalement celui par defaut (sans parametre)
ca peut etre aussi bien
Matrice();
que
Matrice( int 5, int 5, int = 0);
23 juil. 2004 à 21:23
23 juil. 2004 à 21:20
met à jour le zip pour voir
23 juil. 2004 à 21:04
a a+b, ou a a*b....
c'est cette erreur a la compilation :
no match for 'Matrice& = Matrice' operator.
par contre si j'ecrit : a = b;
c'est correct...
??? bizarre, j'ai pourtant bien les bons operateurs definis...
23 juil. 2004 à 20:48
class Matrice
{
public:
typedef std::size_t size_type;
...
private:
size_type N, P;
Matrix XxMatrice;
};
23 juil. 2004 à 20:45
le plus simple c'est des constructeurs prenant en parametres des tableau, des vector, des valarray... pour permettre diverses initialisations
par exemple
Matrice( int, int, double *);
23 juil. 2004 à 20:41
Ceci dit, il est preferable d'en faire une fonction membre ou non, c'est a dire d'entrer les valeurs a l'initialisation?
23 juil. 2004 à 19:13
rajoute des constructeur permettant l'initialisation
http://www.cppfrance.com/code.aspx?ID=22840
23 juil. 2004 à 14:05
23 juil. 2004 à 08:03
sinon tu limite gandement les possibilité d'utilisation de ton module
23 juil. 2004 à 01:54
Evite de penser console systematiquement, a part pour du debug comme dit Kirua, on en voit plus trop l'utilite.
23 juil. 2004 à 00:58
23 juil. 2004 à 00:53
23 juil. 2004 à 00:49
23 juil. 2004 à 00:45
sinon, j'ai pas tres bien comprit la subtilite qui fait que l'utilisation de "std::cout" n'est pas conseille pour l'affichage. Pour un moteur 3D, c'est ok, sinon....pourquoi?
23 juil. 2004 à 00:35
22 juil. 2004 à 23:56
delete[] XxMatrice; et pas delete XxMatrice; sinon ca fuie
et si tu rajoute l'operateur =, ta classe sera vraiment securisée
pour la methode display, elle necessite std::cout de iostream et ca peut etre genant, surtout pour un moteur 3d ou ca n'a rien à faire
met la en inline et fait generer le code seulement si iostream est inclu
// dans le corps
#ifdef _CPP_IOSTREAM
inline void Display() ;
#endif
// dans le fichier .hpp, apres le corps
#ifdef _CPP_IOSTREAM
inline void Matrice::Display()
{
for(int i=0; i #include <ctime> et non time.h
a par ca je trouve que c'est bien codé, surtout si tu debute
j'avaiss deja posté une classe matrice generique si ca t'interesse