|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |
![]() Apprenti Inscription : décembre 2010 Messages : 81 ![]() |
Bonjour,
j'ai fait un constructeur dans une classe pour les nombres rationnels. Dans le fichier .cpp qui détaille le fichier .h pour les fonctions membres. Dans le fichier .h, je détaille, j'ai pour le constructeur dans la partie public : Code :
Q(int a=0,int b=1); // le constructeur de la classe Q (le nombre 1 par défaut) Le problème est que , par la suite dans mon int main(), je déclare un certain c comme étant de type Q (rationnel) avec : (ça devrait donc appeler la constructeur par défaut) mais à ce stade, je ne connais pas la valeur de c. et cela ne fonctionne pas. Voici le message d'erreur : Citation:
Pourtant avant j'ai déclaré par exemple et ça marchait. Pourquoi ça ne marche pas quand je fais D'avance merci |
|
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Guillaume BelzBiochimiste Inscription : novembre 2008 Messages : 5 318 ![]() |
Bonjour
Pour rappel, le message suivant "ça ne marche pas" n'est pas un message d'erreur valide et n'aide pas du tout. Peux tu donner l'erreur exacte donné par le compilateur ou le comportement inattendu ? Merci
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP. Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU. Je suis régulièrement sur le chat pour les questions C++/Qt. Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5. |
|
10
|
|
|
#3 |
|
Membre chevronné
![]() F5(){F5} Inscription : avril 2008 Messages : 450 ![]() |
tu n'as probablement pas defini ton constructeur dans ton cpp:
PS: a(3,4) n'est pas une declaration mais un appel de fonction. |
|
|
10
|
|
|
#4 | ||
![]() Apprenti Inscription : décembre 2010 Messages : 81 ![]() |
J'ai mis le message d'erreur.
En effet, j'ai appelé la fonction avec a(3,4) Dans mon cpp, j'ai fait : Code :
Code :
Q(int a=0,int b=1); // le constructeur de la classe Q (le nombre 0 par défaut) |
||
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Guillaume BelzBiochimiste Inscription : novembre 2008 Messages : 5 318 ![]() |
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP. Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU. Je suis régulièrement sur le chat pour les questions C++/Qt. Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5. |
|
10
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 673 ![]() |
Tout ceci a l'air correct, le problème doit venir d'ailleurs.
As-tu bien inclus le fichier d'en-tête adéquat dans le main? Sinon, copie le code complet, parce que le problème est ailleurs visiblement. |
|
|
10
|
|
|
#7 |
![]() Apprenti Inscription : décembre 2010 Messages : 81 ![]() |
Je suis en train de me dire que mon problème vient peut-être du fait que la classe porte un nom différent du fichier d'en-tête .h qui la contient.
Je ne sais guère. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 673 ![]() |
|
|
|
10
|
|
|
#9 | ||
|
Membre habitué
![]() Étudiant Inscription : avril 2011 Messages : 239 ![]() |
Citation:
Citation:
Sinon ça marcherait Es-tu sur que tu as respecté la casse si tu as inclus le bon fichier ? Ca arrive parfois de se tromper de cette manière et c'est toujours assez ennuyeux de chercher partout pour une toute petite erreur. |
||
|
|
10
|
|
|
#10 | |
|
Membre Expert
![]() ![]() Inscription : novembre 2008 Messages : 973 ![]() |
C’est une erreur de l’éditeur de lien
Citation:
Je pense que tu compiles correctement la classe Q, puis correctement ton main, mais qu’à l’édition de lien, tu ne dis pas que le code de*Q se trouve dans le fichier .o généré et pas dans main.o. Bref, il faut que tu nous dises ce que utilises pour compiler (IDE ou makefile ou ligne de commande), et la structure de tes fichiers et les commandes appelées pour compiler.
__________________
HADOPI - Le Net en France : black-out |
|
|
|
10
|
|
|
#11 |
![]() Apprenti Inscription : décembre 2010 Messages : 81 ![]() |
J'utilise un terminal et lignes de commande
g++ cl.h g++ cl.cpp g++ fichiermain.cpp |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() ![]() Inscription : novembre 2008 Messages : 973 ![]() |
Essaie ceci alors :
g++ cl.cpp fichiermain.cpp -o programme Ensuite, quand tu vas faire un vrai programme, il te faudra un minimum te documenter sur un système de build (makefile basique, cmake, qmake, automake, etc, pas ça qui manque, il faut juste en choisir un, pour des choses simples un makefile basique fait très bien l’affaire, autant commencer par là).
__________________
HADOPI - Le Net en France : black-out |
|
|
10
|
|
|
#13 |
![]() Apprenti Inscription : décembre 2010 Messages : 81 ![]() |
Dans le main, j'avais mis : #include "cl.h"
A quoi sert-il d'ajouter -o ? Que cela engendre-t-il ? merci |
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() ![]() Inscription : novembre 2008 Messages : 973 ![]() |
-o sert simplement à donner le nom du fichier de sortie (par défaut c’est a.out). -c sert à dire de produire un fichier objet, et pas un fichier exécutable (sinon, le linker va râler sur l’absence de main). Dans un premier temps, ce sont les deux options indispensables à connaître.
Je t’invite à lire : http://gl.developpez.com/tutoriel/outil/makefile/ pour une introduction aux makefile. N’hésite pas aussi à lire l’aide de gcc.
__________________
HADOPI - Le Net en France : black-out |
|
|
10
|
|
|
#15 |
![]() Apprenti Inscription : décembre 2010 Messages : 81 ![]() |
Et pourquoi ça ne marche pas si j'écris seulement g++ cl.h , g++ cl.pp et g++ monfichier.cpp puis ./a.out pour l' éxécuter ?
merci |
|
|
00
|
|
|
#16 | |
![]() ![]() |
Salut,
Citation:
A chaque fois que tu "relances l'application", elle a "oublié" tout ce qu'elle a pu faire lors de ces exécutions précédentes ![]() Mais c'est normal : imagines un peu le foutoir que cela ferait si elle devait se rappeler de tous les fichiers qu'elle a pu compiler depuis qu'elle est installée, dont des projets entiers ![]()
__________________
en bas de page
|
|
|
|
10
|
|
|
#17 |
![]() Apprenti Inscription : décembre 2010 Messages : 81 ![]() |
Moi, je pensais que quand je faisais g++ cl.cpp puis enfin g++ monmain.cpp séparément, le résultat de g++ cl.cpp était mémorisé quelque part en attendant l'éxécution de monmain.cpp
Je trouve ça curieux, que comme il vient d'être rappelé, tout est oublié à chaque éxécution de g++. Mais ça semble cohérent en y pensant bien, car si il y a de gros projets, et que des choses ont été modifiées ici où là, la dépendance des fichiers ça et là, pourrait tout perturber. D'où l'idée du make probablement qui permet de tout mettre en lien et revérifier la cohérence. |
|
|
00
|
|
|
#18 | |
![]() ![]() |
Citation:
__________________
en bas de page
|
|
|
|
10
|
|
|
#19 |
![]() Apprenti Inscription : décembre 2010 Messages : 81 ![]() |
je voulais dire: je trouve ça curieux, j'ai modifié mon précédent post.
merci Si je comprends, c'est donc ld qui crée le fichier -o ? et g++ appelle ld ? |
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() ![]() Inscription : novembre 2008 Messages : 973 ![]() |
C’est bien cela.
L’avantage est que g++ t’ajoutes automatiquement toutes les librairies standard c++ quand il appelle ld, t’évitant de le faire toi-même.
__________________
HADOPI - Le Net en France : black-out |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com