Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Débuter
Débuter Forum d'entraide pour débuter en langage de programmation C++. Avant de poster : cours d'initiation au C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/11/2012, 18h08   #1
VivienD
Membre éprouvé
 
Avatar de VivienD
 
Homme Vivien Duboué
Étudiant
Inscription : octobre 2009
Messages : 239
Détails du profil
Informations personnelles :
Nom : Homme Vivien Duboué
Âge : 22
Localisation : Allemagne

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : octobre 2009
Messages : 239
Points : 436
Points : 436
Envoyer un message via Skype™ à VivienD
Par défaut #include, bibliothèques et modules

Bonsoir,

Ça fait un certain temps que je programme en C++ avec la bibliothèque logicielle Qt. J'ai remarqué que, pour utiliser une classe de cette dernière, il fallait ajouter un #include. Par exemple, pour utiliser la classe QWidget, il faut ajouter la ligne #include <QWidget>. Par ailleurs, une autre syntaxe est possible: #include <QtGui/QWidget>; dans cette syntaxe on indique la classe demandée (QWidget) et le module auquel elle appartient (QtGui), module inclus dans une bibliothèque dynamique qui lui est propre (à savoir QtGui4.dll pour le mode release et QtGuid4.dll pour le mode debug).
Ces deux syntaxes m'interpellent et font donc de l'objet de cette discussion. En effet, je voudrais savoir si elles sont spécifiques à Qt. Si ça n'est pas le cas, j'aimerais, bien évidemment, savoir comment les utiliser dans/pour mes petites bibliothèques personnelles.

Merci d'avance pour vos lumières.

Adishatz!
__________________
Timbré tatillon invétéré et fier de l'être!

Digression du jour:
Tiens, comment dit-on «prout» en anglais?
VivienD est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2012, 18h43   #2
JolyLoic
Rédacteur/Modérateur
 
Avatar de JolyLoic
 
Homme Loïc Joly
Développeur informatique
Inscription : août 2004
Messages : 4 679
Détails du profil
Informations personnelles :
Nom : Homme Loïc Joly
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2004
Messages : 4 679
Points : 9 906
Points : 9 906
Le C++ est extrêmement rustique en ce qui concerne le lien avec d'autres bibliothèques. Ce que tu prends pour une demande d'utiliser une classe dans un module est en fait simplement une demande pour inclure un fichier texte qui se situe dans un répertoire, lequel fichier va contenir des éléments que tu pourras ensuite utiliser dans ton programme.

Que tu puisse l'inclure de deux manières différentes es probablement lié au fait que quelque part, dans tes options de compilation, sont ajoutés deux chemins, et qu'il peut donc le trouver quel que soit la manière dont tu désignes ce fichier.
JolyLoic est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/11/2012, 21h47   #3
VivienD
Membre éprouvé
 
Avatar de VivienD
 
Homme Vivien Duboué
Étudiant
Inscription : octobre 2009
Messages : 239
Détails du profil
Informations personnelles :
Nom : Homme Vivien Duboué
Âge : 22
Localisation : Allemagne

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : octobre 2009
Messages : 239
Points : 436
Points : 436
Envoyer un message via Skype™ à VivienD
En gros, lors de la compilation, le compilateur traduit #include <QWidget> et #include <QtGui/QWidget> en quelque chose du genre #include "chemin/relatif/ou/absolu/du/fichier/en/tete/concerne.h". C'est ça?
__________________
Timbré tatillon invétéré et fier de l'être!

Digression du jour:
Tiens, comment dit-on «prout» en anglais?
VivienD est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2012, 01h03   #4
koala01
Modérateur
 
Avatar de koala01
 
Philippe Dunski
Inscription : octobre 2004
Messages : 8 628
Détails du profil
Informations personnelles :
Nom : Philippe Dunski
Âge : 41

Informations forums :
Inscription : octobre 2004
Messages : 8 628
Points : 13 351
Points : 13 351
Envoyer un message via MSN à koala01 Envoyer un message via Skype™ à koala01
Citation:
Envoyé par VivienD Voir le message
En gros, lors de la compilation, le compilateur traduit #include <QWidget> et #include <QtGui/QWidget> en quelque chose du genre #include "chemin/relatif/ou/absolu/du/fichier/en/tete/concerne.h". C'est ça?
Oui, tout à fait...

Si, au moment de la compilation (en ligne de commande), tu regardes un tout petit peu l'instruction qui compile un fichier, tu verras, selon le compilateur, quelque chose comme
Code :
g++ -IunNomDeDossier -IunAutreNomDeDossier -IunTroisiemeNomDeDossier ...
ou (pour le compilateur visual studio)
Code :
cl  /IunNomDeDossier /IunAutreNomDeDossier /IunTroisiemeNomDeDossier ...
L'option I (i majuscule ) indique au compilateur quelque chose comme
Citation:
Si tu cherches un fichier d'en-tête, vas voir dans le dossier indiqué s'il ne s'y trouve pas


Quand Qt a été compilé, qmake a enregistré tous les noms de dossiers dans lesquels il était susceptible de trouver les fichiers d'en-tête pour les différents "modules", et le fait de lancer qmake ajoute automatiquement les dossiers aux options du compilateur

Ceci dit, il y a bien une concordance, chez Qt, entre les noms de dossiers, les "modules" et les bibliothèques correspondantes, mais ce n'est, au final, que le résultat de décisions de développement:

Qt contient plusieurs milliers de fichiers sources, et il était donc important de les "triés" en fonction de leur objectifs.

Ils ont donc, naturellement, divisé le projet en plusieurs "modules" qui regroupent chaque fois les fichiers poursuivant un objectif commun de manière à pouvoir déterminer "plus facilement" dans quel groupe de fichiers se trouve un problème quand il survient.

Chaque "module" est, effectivement, compilé sous la forme d'une bibliothèque séparée, essentiellement, parce que, comme je l'ai déjà indiqué, cela regroupe les objectifs communs, mais, aussi, pour éviter de se retrouver avec une seule et unique bibliothèque "pharaonique" apportant une multitude de fonctionnalités dont on n'a pas *réellement* besoin.

De cette manière, tu n'es pas obligé de te "coltiner" l'ensemble des fonctionnalités réseau ou des fonctionnalités de gestion du Xml (par exemple) si tu fais une application qui n'utilise ni l'un ni l'autre

Cette manière de travailler est une pratique courante dans les projets de moyenne à grande ampleur (aller, on va dire "au delà d'une centaine de fichiers", par exemple ) et dans les projets "collaboratifs" (où il y a plusieurs développeurs qui travaillent "de leur coté) car elle facilite le travail au quotidien en facilitant les tests (on peut tester un ensemble de fonctionnalités ayant un objectif commun sans être embêté par un autre ensemble de fonctionnalités toujours en développement, pour autant que le "module" que l'on teste ne dépende pas de celui encore en développement ) et permet, au final, de partager beaucoup plus facilement le travail dans une équipe
__________________
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
je ne répondrai à aucune question technique par E-mail, message visiteur ou message privé
Vous avez obtenu votre réponse pensez au bouton en bas de page
koala01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h55.


 
 
 
 
Partenaires

Hébergement Web