Erreur lancée par le linker - C++ - Programmation
Marsh Posté le 20-06-2005 à 21:36:39
Tu n'aurais pas oublié de protéger ton .h contre les inclusions multiples, par hasard ?
Marsh Posté le 20-06-2005 à 21:38:10
GCC ne gere pas automatiquement ce genre de soucis ?
Car quand on mets #pragma once il dit que c'est deprecated
Marsh Posté le 20-06-2005 à 21:41:46
#pragma once n'est pas portable.
D'ailleurs, #pragma, ce sont des commandes non portables par définition, c'est pour ça qu'il faut en utiliser le moins possible.
Donc faire comme d'habitude :
#ifndef MACHIN_H_
#define MACHIN_H_
#endif
Marsh Posté le 20-06-2005 à 22:48:33
NON ON NE FAIT JAMAIS MACHIN_H !
ON FAIT __TOUJOURS__ DUPONT_MACHIN_PROJET_DATE_H !
Marsh Posté le 20-06-2005 à 22:50:45
Quel est l'intérêt ? Pour éviter des collisions entre libs ?
Marsh Posté le 20-06-2005 à 22:59:10
ben oui. tu crois que y a combien de blaireau dans le monde qui ont écrit un STACK_H !
Marsh Posté le 21-06-2005 à 10:58:37
ouais, c'est pas impossible le coup des inclusions multiples, en effet...
mais à quel moment, cela se produirait?
Marsh Posté le 21-06-2005 à 11:44:33
ben quand deux blaireaux on fais un STACK_H dans leur fichiers
Marsh Posté le 21-06-2005 à 11:50:50
ah??
ok...
sinon, j'ai essayé de mettre un #ifndef etc...et je suis pas arrivé à linker..toujours multiple definitions...
question: je dois bien mettre la directive dans le fichier ou il y a ma classe que je veux instancier, c'est bien ca? (soit dans le premier fichier)
Marsh Posté le 21-06-2005 à 12:00:13
en fait, je vais fixer le truc..I'm a C++beginner..je m'y interesse parce que ca fait quelques années que je faisais un peu de java, j'avais envie de changer par curiosité.
donc, j'ai lu un peu de doc sur le C++, un bouquin d'un mec, aussi...mais c'est pas évident de démarrer sur quelques chose...
donc, dans mon .h, je dois définir quoi ? ma classe ?
Marsh Posté le 21-06-2005 à 12:48:48
Et si tu lisais le fuckin'manual un peu, avant de venir poser des questions dont la réponse se trouve dans tous les bouquins de C++ ?
Marsh Posté le 21-06-2005 à 12:53:21
c'est pas une mauvaise idée, mais parfois c'est chaud de trouver une réponse à une question dont on a déjà du mal à trouver le sens...faut savoir par où commencer à chercher..
Marsh Posté le 21-06-2005 à 14:31:27
bon...me suis fait un fichier .h... ca ressemble à ça:
Code :
|
voilà, donc j'implémente dans un .cpp ces deux classes, ca compile, mais toujours pas de linkage avec pour message d'erreur principal : undefined reference.
une idée??
Marsh Posté le 21-06-2005 à 14:56:40
manque un destructeur virtuel.
Et maintenant, t'arrêtes de nous saouler, tu relis le topic, ton .h il est pourri
Marsh Posté le 21-06-2005 à 14:58:45
ok...ok..j'arrete de vous saouler...
merci à vous qd même.
bonne continuation...
Marsh Posté le 22-06-2005 à 13:14:51
en fait, dans dev-c++, il faut créer un projet wxwidgets et non pas un projet vide...sinon ca initialise pas les paths pour le linker..
merci à toi, le tazé
Marsh Posté le 20-06-2005 à 21:09:39
Bonjour à tous,
j'ai fait une recherche sur le forum, mais, j'ai pas trouvé de quoi m'aider..
Mon problème de newbie est le suivant, j'ai deux fichiers, dans le premier, je déclare une classe et dans le deuxieme, je voudrais instancier un objet de cette classe...
donc j'ai mis un include du premier fichier dans le deuxieme fichier...ca compile mais erreur lors du linkage..
voici la log:
Compilateur: Default compiler
Building Makefile: "C:\Dev-Cpp\Makefile.win"
Exécution de make...
make.exe -f "C:\Dev-Cpp\Makefile.win" all
g++.exe -c SansNom1.cpp -o SansNom1.o -I"CDev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"CDev-Cpp/include/c++/3.4.2/backward" -I"CDev-Cpp/include/c++/3.4.2/mingw32" -I"CDev-Cpp/include/c++/3.4.2" -I"CDev-Cpp/include"
g++.exe -c SansNom2.cpp -o SansNom2.o -I"CDev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"CDev-Cpp/include/c++/3.4.2/backward" -I"CDev-Cpp/include/c++/3.4.2/mingw32" -I"CDev-Cpp/include/c++/3.4.2" -I"CDev-Cpp/include"
g++.exe SansNom1.o SansNom2.o -o "Projet1.exe" -L"CDev-Cpp/lib"
SansNom2.o(.text+0x0):SansNom2.cpp: multiple definition of `MyFrame::GetEventTable() const'
SansNom1.o(.text+0x0):SansNom1.cpp: first defined here
SansNom2.o(.text+0xa):SansNom2.cpp: multiple definition of `MyFrame::GetEventHashTable() const'
SansNom1.o(.text+0xa):SansNom1.cpp: first defined here
SansNom2.o(.text+0x14):SansNom2.cpp: multiple definition of `MyFrame::MyFrame(wxString const& )'
SansNom1.o(.text+0x14):SansNom1.cpp: first defined here
SansNom2.o(.text+0x76a):SansNom2.cpp: multiple definition of `MyFrame::MyFrame(wxString const& )'
SansNom1.o(.text+0x76a):SansNom1.cpp: first defined here
SansNom2.o(.text+0xec0):SansNom2.cpp: multiple definition of `MyFrame::OnQuit(wxCommandEvent& )'
SansNom1.o(.text+0xec0):SansNom1.cpp: first defined here
SansNom2.o(.rdata+0x0):SansNom2.cpp: multiple definition of `MyFrame::sm_eventTable'
SansNom1.o(.rdata+0x0):SansNom1.cpp: first defined here
SansNom2.o(.bss+0x20):SansNom2.cpp: multiple definition of `MyFrame::sm_eventTableEntries'
SansNom1.o(.bss+0x20):SansNom1.cpp: first defined here
SansNom2.o(.bss+0x0):SansNom2.cpp: multiple definition of `MyFrame::sm_eventHashTable'
SansNom1.o(.bss+0x0
etc...etc...j'ai pas tout mis, mais ce sont des erreurs de ce gout la...
j'utilise wxwigets et dev-c++
si vous avez une idée..
PaowZ