utilisation de with et use en ada - Ada - Programmation
Marsh Posté le 16-03-2006 à 19:35:42
Je ne suis pas spécialiste mais pour moi, "with" appel le package, et use indique qu'on va utiliser les fonctions dans celui-ci.
par exemple avec un
with ada.text_io;
use ada.text_io;
lorsque tu mettras un put("hello" ); cette fonction sera appelée dans le package text_io.
Mais si tu surcharges le put(t : string); dans un package perso par exemple, en en-tête tu mettras juste
with ada.text_io;
with tonpackage;
et dans ton programme tu pouras mettre :
text_io.put("texte affiché avec la fonction générique" );
tonpackage.put("texte affiché avec ta fonction perso" );
bref si tu ne veux pas t'embéter à mettre package.fonction à chaque fois tu peux mettre un "use" en en-tête, mais attention aux conflits avec les surcharges.
Marsh Posté le 20-03-2006 à 15:03:29
merci.
maintenant j'ai un autre probleme: je dispose de 2 packages et je dois en créer un troisième qui apelle les 2 autres. il s'agit de
1/ Plistgen : regroupant le type liste générique et les fonctions associées.
2/ Pmot : définissant un mot comme une liste générique instanciée avec le type caractère
3/ un type pphrase définissant une phrase comme une liste générique instanciée avec le type tmot (définit dans pmot, représente un mot)
le probleme de ce dernier package est que soit il ne reconnait pas le type tmot définit dans pmot, soit il ne reconnait pas certaines fonctions de plistgen instanciées dans pphrase comme une liste de tmot. quelqu'un a-t-il une idée ?
Marsh Posté le 20-03-2006 à 15:10:56
voila le package listegénérique
Code :
|
Le package Pmot
Code :
|
et la package Pphrase
Code :
|
le probleme est une erreur dans le corps du package pphrase:
Code :
|
l'erreur :
Citation : |
Marsh Posté le 20-03-2006 à 16:52:20
Bon, alors 1er conseil:
Utilises les balises de code source pour éditer ton code, comme ça on a accès facilement aux numéros de ligne (c'est + pratique).
Faut nous aider un peu si tu veux qu'on t'aide, j'ai pas envie de m'embêter à chercher où est la ligne 40 de Plistgen.ads ou la ligne 11 d'un autre fichier...
Marsh Posté le 20-03-2006 à 19:09:21
étant donné que je n'ai pas trouvé comment afficher les N° de lignes avec object ada, j'ai rajouté des commentaires en rouge pointant les erreurs.
(au passage si quelqu'un sait comment on fait pour les N° de lignes)
Marsh Posté le 21-03-2006 à 01:20:44
normalement avec les versions un peu recente de Jgrasp(autre environment de developpement Ada 95) tu as directement les numeros de lignes dans l'icone Toggle lines number, il suffit juste de cliquer dessus pour que les numeros de lignes de ton code s'affiche. Qd tu veux plus tu cliques de nouveau dessus pour desactiver. et ca marche
Marsh Posté le 21-03-2006 à 15:01:26
tris a écrit : étant donné que je n'ai pas trouvé comment afficher les N° de lignes avec object ada, j'ai rajouté des commentaires en rouge pointant les erreurs. |
Quand tu édites ton source dans un post utilises les balises C/C++ comme ça:
Code :
|
Il suffit ensuite de double clicker sur la zone d'affichage pour faire apparaitre ou disparaitre les numéros de ligne.
Marsh Posté le 21-03-2006 à 15:11:08
Bon pour ton problème, ça à l'air évident : le compilateur te dit exactement ce qui ne va pas :
Tu appèles Present(..) avec un paramètre de type Tmot alors qu'il faut un Tptrcellule.
Marsh Posté le 21-03-2006 à 15:17:19
mais le type tmot est un tptrcellule qui pointe dans ce cas une cellule avec un caractère.
Marsh Posté le 21-03-2006 à 15:30:38
tris a écrit : mais le type tmot est un tptrcellule qui pointe dans ce cas une cellule avec un caractère. |
NON, le type Tmot n'est pas un Ptrcellule.
Lorsque tu déclare :
Code :
|
Tu dis aux utilisateurs de ce paquetage (les parties du programme qui utilisent ton paquetage) que Tmot est un type sur lequel sont permises les opérations d'affectation et de comparaison (= et /=).
Donc pas question d'inventer des opérations sur ce type.
(Je sens que tu galères un peu là).
Bon pour l'instant j'ai pas trop le temps de me pencher sur ton prog, alors a+ et lis un peu des cours sur la dérivation de type (genre cours de l'iut de Luminy de Daniel Feneuille)
Bon travail ...
Marsh Posté le 21-03-2006 à 15:38:45
la définition est complétée plus bas:
Code :
|
Marsh Posté le 22-03-2006 à 14:16:07
Oui mais non, le type Tmot n'est pas un Ptrcellule.
tris a écrit : la définition est complétée plus bas:
|
Bon apparemment par:
Code :
|
Tu veux dire ça :
Code :
|
N'est-ce pas?
Est ce que tu comprends pourquoi ce prog ne compile pas ? :
Code :
|
Réponse : parceque Get n'est pas une primitive de Integer (puisque Integer est déclaré dans standard et get dans Ada.Text_Io => Integer est "figé" à la fin des déclarations de Standard).
Par contre tu peux écrire :
Code :
|
car "+", "*", "**", .... sont déclarées comme primitives de Integer dans standard et donc héritées par Entier.
Bon, maintenant autre chose :
Code :
|
En dérivant ce type en un type T2, tu peux évidemment utiliser les primitives de T1 appliquées à T2.
Mais toi tu dérives dans la partie privée :
Code :
|
Tu ne peux pas utiliser (dans Pphrase) les primitives de Tptrcellule appliquées à Tmot car dans Pphrase tu ne sais pas que Tmot dérive de Tptrcellule.
Marsh Posté le 22-03-2006 à 23:03:31
j'ai résolu le probleme en créant une autre fonction
dernier_mot(in tmot) return boolean
dans pmot pour tester si le . est présent
Marsh Posté le 16-03-2006 à 12:01:55
voila, pour le moment je tatonne avec les with et les use pour appeller les packages, mais j'aimerai savoir quelle est l'utilité du with, et du use pour les utiliser a bon escient. Merci !