Probleme de lieur

Probleme de lieur - C++ - Programmation

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 :
 

Code :
  1. Population::Population(int popSize, int maxNumWHS, int numCS, double supply,
  2.                        Vector<double, int> demand, Database& db)
  3. {   
  4.     data = &db;
  5.     size = popSize;
  6.     pop = Vector<Solution, int>(size);
  7.     for (int n=size-1; n>=0;n--)
  8.     {
  9.         pop[n] = Solution(maxNumWHS, numCS);
  10.         pop[n].Init(maxNumWHS, numCS, supply, demand, data);
  11.     }
  12. }


 
Et le debut de la fonction init:
 

Code :
  1. void Solution::Init(int maxNumWHS, int numCS, double supply,
  2.                     Vector<double, int> demand, Database& data)
  3.     data2 = &data;
  4. }


 
 
Le .hpp:
 

Code :
  1. void Init(int maxNumWHS, int numCS, double supply,
  2.           Vector<double, int> demand, Database& data);


 
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
Reply

Marsh Posté le 27-01-2009 à 12:19:09   

Reply

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);

Reply

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 ...

Reply

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 :
  1. class Population
  2. {
  3. Public:
  4.     ...
  5.     Population(int popSize, int maxNumWHS, int numCS, double supply,
  6.                        Vector<double, int> demand, Database* const data);
  7. };


 
Constructeur de la classe Population:

Code :
  1. Population::Population(int popSize, int maxNumWHS, int numCS, double supply,
  2.                        Vector<double, int> demand, Database* const data)
  3. {   
  4.     size = popSize;
  5.     pop = Vector<Solution, int>(size);
  6.     for (int n=size-1; n>=0;n--)
  7.     {
  8.         pop[n] = Solution(maxNumWHS, numCS);
  9.         pop[n].Init(maxNumWHS, numCS, supply, demand, *data);
  10.     }
  11. }


 
Fichier .hpp de la classe Solution:

Code :
  1. class Solution
  2. {
  3. public:
  4.     ...
  5.     void Init(int maxNumWHS, int numCS, double supply,
  6.               Vector<double, int> demand, const Database & data);
  7. };


 
Fonction Init dans le fichier Solution.cpp:

Code :
  1. void Solution::Init(int maxNumWHS, int numCS, double supply,
  2.                     Vector<double, int> demand, const Database & data)
  3. {
  4.      ...
  5.                 WHSindex = data.find(i, rank);
  6.      ...
  7. }


 
Fichier .hpp de la classe Database:

Code :
  1. class Database
  2. {
  3. public:
  4.     ...
  5.     int find(int, int);
  6. };


 
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'
C:/Dev-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

Reply

Marsh Posté le 28-01-2009 à 10:52:49    

tes multipels definition sont surement du a l'oubli d'include guards dans thes .hpp ...

Reply

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

Reply

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

Reply

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


---------------
You can't start a fire with moonlight
Reply

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 :
  1. #include "Solution.hpp"
  2. #include "Vector.hpp"
  3. #ifndef POPULATION_HPP
  4. #define POPULATION_HPP
  5. namespace Datasim
  6. {
  7. class Population
  8. {
  9. private:
  10.     int size;
  11.     Vector<Solution, int> pop;
  12.     //Solution sol;
  13. public:
  14.     Population();
  15.     Population(int popSize, int maxNumWHS, int numCS, double supply,
  16.                        Vector<double, int> demand);
  17. };
  18. } // End of namespace Datasim
  19. #endif // POPULATION_HPP


 
Le code du fichier Population.cpp :

Code :
  1. #include "Population.hpp"
  2. #include "Solution.hpp"
  3. #include "Vector.hpp"
  4. #include <math.h>
  5. #include <iostream>
  6. //using namespace std;
  7. #ifndef POPULATION_CPP
  8. #define POPULATION_CPP
  9. namespace Datasim
  10. {
  11. // Constructors and destructor
  12. Population::Population()
  13. {
  14. }
  15. Population::Population(int popSize, int maxNumWHS, int numCS, double supply,
  16.                        Vector<double, int> demand)
  17. {   
  18.     size = popSize;
  19.     pop = Vector<Solution, int>(size);
  20.     for (int n=size-1; n>=0;n--)
  21.     {
  22.         /*Solution sol(maxNumWHS, numCS);
  23.         sol.Init(maxNumWHS, numCS, supply, demand, db);
  24.         pop[n]=&sol;*/
  25.         pop[n] = Solution(maxNumWHS, numCS);
  26.         pop[n].Init(maxNumWHS, numCS, supply, demand);
  27.     }
  28. }
  29. }
  30. // End of name space Datasim
  31. #endif // POPULATION_CPP


 
Mon programme principal :
 

Code :
  1. #include "Population.hpp"
  2. #include <string>
  3. #include <fstream>
  4. #include <iostream>
  5. using namespace std;
  6. int main()
  7. {
  8. int popsize = 100;
  9. int numMaxWHS = 10;
  10. int numCS = 15;
  11. double supply = 150000;
  12. Vector<double, int> demand = Vector<double, int>(numCS);
  13. for(int n = numCS-1; n >= 0 ; n--)
  14. {
  15.              demand[n] = supply/numCS;
  16. }
  17. Population pop(popSize, numMaxWHS, numCS, supply, demand);
  18. return 0;
  19. }


 
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

Reply

Marsh Posté le 29-01-2009 à 10:40:15    

Met tes include guards avant tes #include déjà  ;)
 
Et les :

Code :
  1. # #include "Solution.hpp"
  2. # #include "Vector.hpp"


 
ne servent à rien dans Population.cpp, puisqu'ils sont inclus dans Population.hpp.


Message édité par kyntriad le 29-01-2009 à 10:42:44

---------------
You can't start a fire with moonlight
Reply

Marsh Posté le 29-01-2009 à 10:40:15   

Reply

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 :
  1. #include "Vector.hpp"
  2. #include "Population.hpp"
  3. #include <string>
  4. #include <fstream>
  5. #include <iostream>
  6. using namespace std;
  7. int main()
  8. {
  9. // Declare and initialise the parameters
  10. int popsize = 100;
  11. int numMaxWHS = 10;
  12. int numCS = 15;
  13. double supply = 150000;
  14. Vector<double, int> demand = Vector<double, int>(numCS);
  15. for(int n = numCS-1; n >= 0 ; n--)
  16. {
  17.             demand[n] = supply/numCS;
  18. }
  19.     Population pop(popSize, numMaxWHS, numCS, supply, demand);
  20. return 0;
  21. }


 
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.

Reply

Marsh Posté le 29-01-2009 à 11:01:44    

et ton namespace ...

Reply

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.


Message édité par kyntriad le 29-01-2009 à 11:24:28

---------------
You can't start a fire with moonlight
Reply

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 :
  1. #include <math.h>
  2. #include <iostream>


 
Soit tu utilise les en-tête anciens comme iostream.h, soit les nouveaux, mais ne mélange pas les 2, mets :

Code :
  1. #include <cmath>
  2. #include <iostream>

Reply

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 :D
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 :
  1. struct Point
  2. {
  3.    int x;
  4.    int y;
  5. };

Reply

Marsh Posté le 29-01-2009 à 16:24:42    

prefixage de membreG [:sadnoir]

Reply

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 :o


---------------
You can't start a fire with moonlight
Reply

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"C:/Dev-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()'

Reply

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)


---------------
You can't start a fire with moonlight
Reply

Marsh Posté le 30-01-2009 à 11:43:55    

Il est ou ton vector.o ...

Reply

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.


---------------
You can't start a fire with moonlight
Reply

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

Reply

Marsh Posté le 01-02-2009 à 12:31:56    

Joel F a écrit :

prefixage de membreG [:sadnoir]


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.

Reply

Marsh Posté le 01-02-2009 à 12:40:48    

jesus_christ a écrit :


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.


 
On est d'accord ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed