Probleme de lieur - C++ - Programmation
Marsh Posté le 27-01-2009 à 13:21:04
Je suppose que data est un Database*.
Donc :
pop[n].Init(maxNumWHS, numCS, supply, demand, *data); |
Marsh Posté le 27-01-2009 à 13:37:24
et au passage : passer ses parametres par références constantes plutot que par copie à l'air sexy ...
Marsh Posté le 28-01-2009 à 08:07:34
Bonjour,
Merci d'avoir pris le temps de repondre a ma question.
Malheureusement vos reponses n'ont pas resolu mon probleme meme si je n'obtiens plus le meme message d'erreur, j'ai regarde des cours de C++ sur les references et pointeurs constants mais visiblement je ne les utilise pas bien. J'avoue etre tres ennuye car je suis completement perdu...
Voici l'etat d'avancement de mon programme:
Fichier .hpp de la classe Population:
Code :
|
Constructeur de la classe Population:
Code :
|
Fichier .hpp de la classe Solution:
Code :
|
Fonction Init dans le fichier Solution.cpp:
Code :
|
Fichier .hpp de la classe Database:
Code :
|
Pour simplifier, mon programme principal cree un objet Population qui est un tableau de Solution. Chaque Solution doit etre initialisee via la fonction Init qui utilise des donnees (de distances entre des villes) qui se trouvent dans un fichier qui est lu par la fonction find de la classe Database.
Je passe l'objet data (qui est un objet Database) en parametre de chaque fonction pour pouvoir l'utiliser dans la fonction Init. C'est ce passage en parametre qui pose probleme.
Le compilateur me renvoie le message suivant qui ne ressemble pas a un message d'erreur classique :
Programme/Population.o(.text+0x100):Population.cpp: multiple definition of `Datasim::Database::Database()'
Programme/Database.o(.text+0x100):Database.cpp: first defined here
Programme/Population.o(.text+0x106):Population.cpp: multiple definition of `Datasim::Database::Database()'
Programme/Database.o(.text+0x106):Database.cpp: first defined here
Programme/Population.o(.text+0x10c):Population.cpp: multiple definition of `Datasim::Database::Database(int)'
Programme/Database.o(.text+0x10c):Database.cpp: first defined here
Programme/Population.o(.text+0x11a):Population.cpp: multiple definition of `Datasim::Database::Database(int)'
Programme/Database.o(.text+0x11a):Database.cpp: first defined here
Programme/Population.o(.text+0x128):Population.cpp: multiple definition of `Datasim::Database::find(int, int)'
Programme/Database.o(.text+0x128):Database.cpp: first defined here
Programme/Solution.o(.text+0x100):Solution.cpp: multiple definition of `Datasim::Database::Database()'
Programme/Database.o(.text+0x100):Database.cpp: first defined here
Programme/Solution.o(.text+0x106):Solution.cpp: multiple definition of `Datasim::Database::Database()'
Programme/Database.o(.text+0x106):Database.cpp: first defined here
Programme/Solution.o(.text+0x10c):Solution.cpp: multiple definition of `Datasim::Database::Database(int)'
Programme/Database.o(.text+0x10c):Database.cpp: first defined here
Programme/Solution.o(.text+0x11a):Solution.cpp: multiple definition of `Datasim::Database::Database(int)'
Programme/Database.o(.text+0x11a):Database.cpp: first defined here
Programme/Solution.o(.text+0x658):Solution.cpp: multiple definition of `Datasim::Solution::Solution()'
Programme/Population.o(.text+0x658):Population.cpp: first defined here
Programme/Solution.o(.text+0x792):Solution.cpp: multiple definition of `Datasim::Solution::Solution()'
Programme/Population.o(.text+0x792):Population.cpp: first defined here
Programme/Solution.o(.text+0x8cc):Solution.cpp: multiple definition of `Datasim::Solution::Solution(int, int)'
Programme/Population.o(.text+0x8cc):Population.cpp: first defined here
Programme/Solution.o(.text+0xd76):Solution.cpp: multiple definition of `Datasim::Solution::Solution(int, int)'
Programme/Population.o(.text+0xd76):Population.cpp: first defined here
Programme/Population.o(.text+0x692):Population.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/Population.o(.text+0x7cc):Population.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/Population.o(.text+0x909):Population.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/Population.o(.text+0xdb3):Population.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/Population.o(.text+0x1be4):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x1c0d):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x1f02):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x1f2b):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text$_ZNSt6vectorIN7Datasim8SolutionESaIS1_EEC1Ej[std::vector<Datasim::Solution, std::allocator<Datasim::Solution> >::vector(unsigned int)]+0x15f):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text$_ZNSt6vectorIN7Datasim8SolutionESaIS1_EEC1Ej[std::vector<Datasim::Solution, std::allocator<Datasim::Solution> >::vector(unsigned int)]+0x185):Population.cpp: more undefined references to `Datasim::Solution::~Solution()' follow
Programme/Population.o(.text$_ZSt10_ConstructIN7Datasim8SolutionES1_EvPT_RKT0_[void std::_Construct<Datasim::Solution, Datasim::Solution>(Datasim::Solution*, Datasim::Solution const& )]+0x66):Population.cpp: undefined reference to `Datasim::Solution::Solution(Datasim::Solution const& )'
Programme/Solution.o(.text+0x692):Solution.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/Solution.o(.text+0x7cc):Solution.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/Solution.o(.text+0x909):Solution.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/Solution.o(.text+0xdb3):Solution.cpp: undefined reference to `vtable for Datasim::Solution'
CDev-Cpp/lib/libmingw32.a(main.o)(.text+0x106):main.c: undefined reference to `WinMain@16'
collect2: ld returned 1 exit status
make.exe: *** ["Distribution] Error 1
Execution terminated
Pouvez-vous m'eclairer sur ce probleme ?
Merci d'avance.
Bonne journee.
Jean
Marsh Posté le 28-01-2009 à 10:52:49
tes multipels definition sont surement du a l'oubli d'include guards dans thes .hpp ...
Marsh Posté le 28-01-2009 à 11:24:17
Merci pour ta reponse, j'ai bien des include guards dans mes fichiers .hpp:
#ifndef POPULATION_HPP
#define POPULATION_HPP
etc...
Est-ce ce a quoi tu fais reference ?
Thanks,
Jean
Marsh Posté le 28-01-2009 à 13:18:19
Je viens encore de perdre 2h sur ce bug et sur internet pour chercher une solution. Pour la premiere fois de ma vie j'ai l'impression d'etre limite intellectuellement.
J'ai passe beaucoup de temps sur ce programme et c'est vraiment frustrant d'etre bloque si proche du but...
Je comprend bien qu'il y a un probleme avec les include (que j'ai tous change en include xxx.hpp, certains etaient en xxx.cpp), j'ai bien les includes guards dans tous mes fichiers .hpp mais si je comprend bien ils ne protegent que de definition multiples au sein de la meme classe et pas a l'exterieur.
Je ne vois vraiment pas comment avancer, merci de m'aider si vous avez quelques minutes.
Bonne journee,
Jean
Marsh Posté le 28-01-2009 à 14:30:36
Envoie population.h / .cpp en entier ainsi que les fichier ou est implémentée la classe Database, m'est avis que cela sera plus clair pour les gens qui souhaitent aider
Marsh Posté le 29-01-2009 à 09:05:10
Desole je repond en decale car je vis en Chine...
Le nombre d'erreur a la compilation a diminue (33 au lieu de 48). En fait je ne sais pas si il s'agit d'erreur a la compilation car les fichiers se compilent bien separement, s'agit t'il d'erreurs du linker ?
Voici le code du fichier Population.hpp:
Code :
|
Le code du fichier Population.cpp :
Code :
|
Mon programme principal :
Code :
|
J'ai peur que ce soit un peu long si je poste tous mes fichiers car les autres classes sont plus consequentes, voici les messages d'erreur que j'obtiens :
Programme/main.o(.text+0x390):main.cpp: multiple definition of `Datasim::Solution::Solution(int, int)'
Programme/Solution.o(.text+0x100):Solution.cpp: first defined here
Programme/main.o(.text+0x880):main.cpp: multiple definition of `Datasim::Solution::Solution(int, int)'
Programme/Solution.o(.text+0x5f0):Solution.cpp: first defined here
Programme/main.o(.text+0xd70):main.cpp: multiple definition of `Datasim::Solution::Init(int, int, double, Vector<double, int, FullArray<double, std::allocator<double> > > )'
Programme/Solution.o(.text+0xae0):Solution.cpp: first defined here
Programme/Population.o(.text+0x110):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector()'
Programme/Population.o(.text+0x126):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector()'
Programme/Population.o(.text+0x184):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector()'
Programme/Population.o(.text+0x1aa):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector(int)'
Programme/Population.o(.text+0x1c9):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::operator=(Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > > const& )'
Programme/Population.o(.text+0x1ec):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text+0x212):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text+0x2b8):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x2e1):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x2f3):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Population.o(.text+0x400):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text+0x49a):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector()'
Programme/Population.o(.text+0x4c0):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector(int)'
Programme/Population.o(.text+0x4df):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::operator=(Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > > const& )'
Programme/Population.o(.text+0x502):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text+0x528):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text+0x5ce):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x5f7):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x609):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Population.o(.text+0x716):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Solution.o(.text+0x13d):Solution.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/Solution.o(.text+0x62d):Solution.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/main.o(.text+0x13a):main.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/main.o(.text+0x282):main.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/main.o(.text+0x3cd):main.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/main.o(.text+0x8bd):main.cpp: more undefined references to `vtable for Datasim::Solution' follow
collect2: ld returned 1 exit status
Merci de m'aider si vous voyez d'ou vient le probleme. J'ai fait la connerie de ne pas compiler ce projet des le debut et maintenant je me retrouve avec tout un tas d'erreur dont je ne trouve pas la source. J'espere ne pas avoir fait tout ce travail pour rien.
Bonne journee,
Jean
Marsh Posté le 29-01-2009 à 10:40:15
Met tes include guards avant tes #include déjà
Et les :
Code :
|
ne servent à rien dans Population.cpp, puisqu'ils sont inclus dans Population.hpp.
Marsh Posté le 29-01-2009 à 10:54:53
Je te remercie pour ces remarques, maintenant c'est la compilation de main.cpp qui pose probleme :
Programme/main.cpp: In function `int main()':
Programme/main.cpp:26: error: `Population' undeclared (first use this function)
Programme/main.cpp:26: error: (Each undeclared identifier is reported only once for each function it appears in.)
Programme/main.cpp:26: error: expected `;' before "pop"
Pour rappel voila le code de main.cpp :
Code :
|
Population est compile (et le fichier Population.o existe) et j'ai bien fait l'include. Je ne comprend pas pourquoi cela ne marche pas, ce qui m'etonne est que j'ai l'impression de faire exactement la meme chose que sur un precedent projet que j'ai fait en C++ pour lequel je n'avais rencontre aucun probleme.
Many thanks,
Jean.
Marsh Posté le 29-01-2009 à 11:24:18
Accessoirement, tu devrait compiler régulièrement histoire de pas te retrouver avec un gros pataquès a la fin.
Marsh Posté le 29-01-2009 à 11:40:30
Population ça n'existe pas, c'est Datasim::Population
et je déconseille l'utilisation de
using namespace std;
dans un fichier. Dans le scope d'une fonction, à la rigueur.
Code :
|
Soit tu utilise les en-tête anciens comme iostream.h, soit les nouveaux, mais ne mélange pas les 2, mets :
Code :
|
Marsh Posté le 29-01-2009 à 11:44:52
autre conseil : préfixe tes membres de classes.
pop et size, j'ai mis du temps avant de comprendre que c'était des membres
Je conseille de préfixer par m_ les membres et s_ les static, comme dans MFC, mais c'est une question de coding-style. Mais ne rien mettre rend le code difficile à lire. Tu peux ne pas préfixer les membres de structures simples à la rigueur, comme :
Code :
|
Marsh Posté le 29-01-2009 à 16:26:04
Moué bof, avant de se poser des questions de cosmétique du code, ça serait bien que ça compile
Marsh Posté le 30-01-2009 à 09:13:23
Je vous remercie tous pour vos remarques, avec le Datasim::Population, la compilation se fait bien mais je ne comprend pas pourquoi je dois mettre Datasim::.
Il me reste toujours ces problemes de lieur, je suis sur que ca ne doit pas etre un gros probleme mais je n'arrive vraiment pas a m'en depetrer malgre vos remarques. Je suis desole.
Pour info vous trouverez ci-dessous ce que me dit le lieur cette fois. D'habitude je compile petit a petit en construisant mon projet mais la je suis parti d'un programme deja assez gros qu'avait fait ma copine et que j'ai finalement du completement refaire, j'aurai mieux fait de repartir de zero plutot que de reecricre dans ses fichiers...
Merci pour votre aide et bonne journee,
Jean
g++.exe Programme/Array.o Programme/ArrayStructure.o Programme/Database.o Programme/FullArray.o Programme/Population.o Programme/Solution.o Programme/Vector.o Programme/main.o -o "Distribution Network.exe" -L"CDev-Cpp/lib"
Programme/Database.o(.text+0x212):Database.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::Vector(int)'
Programme/Database.o(.text+0x36b):Database.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::Vector(int)'
Programme/Database.o(.text+0x38d):Database.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::operator=(Vector<int, int, FullArray<int, std::allocator<int> > > const& )'
Programme/Database.o(.text+0x3e8):Database.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::~Vector()'
Programme/Database.o(.text+0x411):Database.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::~Vector()'
Programme/Database.o(.text+0x597):Database.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::~Vector()'
Programme/Database.o(.text+0x5e1):Database.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::~Vector()'
Programme/Population.o(.text+0x110):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector()'
Programme/Population.o(.text+0x126):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector()'
Programme/Population.o(.text+0x184):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector()'
Programme/Population.o(.text+0x1aa):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector(int)'
Programme/Population.o(.text+0x1c9):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::operator=(Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > > const& )'
Programme/Population.o(.text+0x1ec):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text+0x212):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text+0x2b8):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x2e1):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x2f3):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Population.o(.text+0x3af):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Population.o(.text+0x3d2):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Population.o(.text+0x400):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text+0x49a):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector()'
Programme/Population.o(.text+0x4c0):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::Vector(int)'
Programme/Population.o(.text+0x4df):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::operator=(Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > > const& )'
Programme/Population.o(.text+0x502):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text+0x528):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text+0x5ce):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x5f7):Population.cpp: undefined reference to `Datasim::Solution::~Solution()'
Programme/Population.o(.text+0x609):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Population.o(.text+0x6c5):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Population.o(.text+0x6e8):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Population.o(.text+0x716):Population.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Programme/Population.o(.text$_ZN7Datasim8SolutionaSERKS0_[Datasim::Solution::operator=(Datasim::Solution const& )]+0x4a):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::operator=(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Population.o(.text$_ZN7Datasim8SolutionaSERKS0_[Datasim::Solution::operator=(Datasim::Solution const& )]+0x62):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::operator=(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Population.o(.text$_ZN7Datasim8SolutionaSERKS0_[Datasim::Solution::operator=(Datasim::Solution const& )]+0x7a):Population.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::operator=(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Population.o(.text$_ZN7Datasim8SolutionaSERKS0_[Datasim::Solution::operator=(Datasim::Solution const& )]+0x92):Population.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::operator=(Vector<int, int, FullArray<int, std::allocator<int> > > const& )'
Programme/Solution.o(.text+0x13d):Solution.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/Solution.o(.text+0x152):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector()'
Programme/Solution.o(.text+0x167):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector()'
Programme/Solution.o(.text+0x17c):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector()'
Programme/Solution.o(.text+0x191):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::Vector()'
Programme/Solution.o(.text+0x1e5):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(int)'
Programme/Solution.o(.text+0x201):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::operator=(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Solution.o(.text+0x21b):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x238):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x24d):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(int)'
Programme/Solution.o(.text+0x269):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::operator=(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Solution.o(.text+0x283):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x2a0):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x2b5):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(int)'
Programme/Solution.o(.text+0x2d1):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::operator=(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Solution.o(.text+0x2ee):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x30e):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x323):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::Vector(int)'
Programme/Solution.o(.text+0x33f):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::operator=(Vector<int, int, FullArray<int, std::allocator<int> > > const& )'
Programme/Solution.o(.text+0x3cc):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::~Vector()'
Programme/Solution.o(.text+0x3ec):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::~Vector()'
Programme/Solution.o(.text+0x545):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::~Vector()'
Programme/Solution.o(.text+0x56c):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x593):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x5ba):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x62d):Solution.cpp: undefined reference to `vtable for Datasim::Solution'
Programme/Solution.o(.text+0x642):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector()'
Programme/Solution.o(.text+0x657):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector()'
Programme/Solution.o(.text+0x66c):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector()'
Programme/Solution.o(.text+0x681):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::Vector()'
Programme/Solution.o(.text+0x6d5):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(int)'
Programme/Solution.o(.text+0x6f1):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::operator=(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Solution.o(.text+0x70b):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x728):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x73d):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(int)'
Programme/Solution.o(.text+0x759):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::operator=(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Solution.o(.text+0x773):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x790):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x7a5):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(int)'
Programme/Solution.o(.text+0x7c1):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::operator=(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/Solution.o(.text+0x7de):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x7fe):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x813):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::Vector(int)'
Programme/Solution.o(.text+0x82f):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::operator=(Vector<int, int, FullArray<int, std::allocator<int> > > const& )'
Programme/Solution.o(.text+0x8bc):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::~Vector()'
Programme/Solution.o(.text+0x8dc):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::~Vector()'
Programme/Solution.o(.text+0xa35):Solution.cpp: undefined reference to `Vector<int, int, FullArray<int, std::allocator<int> > >::~Vector()'
Programme/Solution.o(.text+0xa5c):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0xa83):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0xaaa):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0xfc7):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(int)'
Programme/Solution.o(.text+0x1299):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/Solution.o(.text+0x12d2):Solution.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/main.o(.text+0x1a4):main.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(int)'
Programme/main.o(.text+0x202):main.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::Vector(Vector<double, int, FullArray<double, std::allocator<double> > > const& )'
Programme/main.o(.text+0x280):main.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/main.o(.text+0x2a6):main.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/main.o(.text+0x2c9):main.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/main.o(.text+0x2f6):main.cpp: undefined reference to `Vector<double, int, FullArray<double, std::allocator<double> > >::~Vector()'
Programme/main.o(.text$_ZN7Datasim10PopulationD1Ev[Datasim::Population::~Population()]+0x10):main.cpp: undefined reference to `Vector<Datasim::Solution, int, FullArray<Datasim::Solution, std::allocator<Datasim::Solution> > >::~Vector()'
Marsh Posté le 30-01-2009 à 09:50:22
Et bien pour le Datasim::Population, c'est juste pour dire au compilo qu'il doit regarder dans le namespace Datasim pour trouver Population; Sinon il cherche dans le namespace global et ne trouve pas population (qui est défini dans Datasim), et génère des erreurs.
Après je sais pas, vérifie tes includes amha.
envoie ton projet si tu veux (MP)
Marsh Posté le 30-01-2009 à 21:05:19
Pour info le tas d'erreur, c'est quand on met l'implementation des classes template dans un .cpp non inclus à l'utilisation.
Marsh Posté le 31-01-2009 à 16:01:33
Bonjour,
Je vous remercie tous pour votre aide, en particulier kyntriad a qui j'ai envoye mon projet et qui l'a debugge.
Plus aucun probleme.
Bon week-end,
Jean
Marsh Posté le 01-02-2009 à 12:31:56
Joel F a écrit : prefixage de membreG |
matter of style...
Je comprends ceux qui évitent, mais je gagne beaucoup en clareté avec les préfixes à la MFC, même si c'est le seul truc bien dans la MFC, donc je conseille de s'en servir. Après il y a des arguments dans les 2 sens. Attention je ne conseille pas la notation Hongroise, juste le prefixage par m_ ou s_. Certains autres grands proj s'en servent, comme WxWidgets.
Citation : Moué bof, avant de se poser des questions de cosmétique du code, ça serait bien que ça compile |
effectivement, mais avec un bon style de code, on a beaucoup moins tendance à faire des erreurs bêtes qui génèrent 800 lignes d'erreurs. On ne va pas loin sans un bon style, quel qu'il soit, alors autant s'y mettre le + tôt possible.
Marsh Posté le 01-02-2009 à 12:40:48
jesus_christ a écrit : |
On est d'accord
Marsh Posté le 27-01-2009 à 12:19:09
Bonjour,
Je suis bloque sur un programme que je dois faire pour ma copine (algorithme genetique pour l'optimisation d'un reseau de distribution) et je ne vois vraiment pas d'ou vient la seule erreur qu'il me reste (je vous avoue que je ne comprend pas trop ce point en C++) :
Population.cpp no matching function for call to `Datasim::Solution::Init(int&, int&, double&, Vector<double, int, FullArray<double, std::allocator<double> > >&, Datasim::Database*& )'
Solution.cpp:94 candidates are: void Datasim::Solution::Init(int, int, double, Vector<double, int, FullArray<double, std::allocator<double> > >, Datasim::Database& )
Voici le morceau de code qui pose probleme :
Et le debut de la fonction init:
Le .hpp:
Encore une fois je ne comprend pas trop ces histoires de * et & dans les parametres de fonctions, je ne sais meme pas comment on les nomme en C++. Je suis sur qu'il manque juste une * quelque part mais j'ai l'impression d'avoir essayer toutes les solutions sans succes. Pouvez-vous me debloquer et me dire comment s'appelle cette technique pour que je puisse chercher sur Internet des informations et savoir l'utiliser a l'avenir.
Merci pour votre aide et bonne journee.
Jean.
Message édité par Stagiaire9 le 29-01-2009 à 09:11:42