Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1605 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Probleme de lieur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de lieur

n°1843561
Stagiaire9
Posté le 27-01-2009 à 12:19:09  profilanswer
 

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
mood
Publicité
Posté le 27-01-2009 à 12:19:09  profilanswer
 

n°1843578
Tarabiscot​e
Posté le 27-01-2009 à 13:21:04  profilanswer
 

Je suppose que data est un Database*.
Donc :

pop[n].Init(maxNumWHS, numCS, supply, demand, *data);

n°1843596
Joel F
Real men use unique_ptr
Posté le 27-01-2009 à 13:37:24  profilanswer
 

et au passage : passer ses parametres par références constantes  plutot que par copie à l'air sexy ...

n°1843987
Stagiaire9
Posté le 28-01-2009 à 08:07:34  profilanswer
 

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

n°1844054
Joel F
Real men use unique_ptr
Posté le 28-01-2009 à 10:52:49  profilanswer
 

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

n°1844087
Stagiaire9
Posté le 28-01-2009 à 11:24:17  profilanswer
 

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

n°1844172
Stagiaire9
Posté le 28-01-2009 à 13:18:19  profilanswer
 

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

n°1844235
kyntriad
Posté le 28-01-2009 à 14:30:36  profilanswer
 

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
n°1844511
Stagiaire9
Posté le 29-01-2009 à 09:05:10  profilanswer
 

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

n°1844546
kyntriad
Posté le 29-01-2009 à 10:40:15  profilanswer
 

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
mood
Publicité
Posté le 29-01-2009 à 10:40:15  profilanswer
 

n°1844558
Stagiaire9
Posté le 29-01-2009 à 10:54:53  profilanswer
 

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.

n°1844561
Taz
bisounours-codeur
Posté le 29-01-2009 à 11:01:44  profilanswer
 

et ton namespace ...

n°1844576
kyntriad
Posté le 29-01-2009 à 11:24:18  profilanswer
 

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
n°1844594
jesus_chri​st
votre nouveau dieu
Posté le 29-01-2009 à 11:40:30  profilanswer
 

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>

n°1844595
jesus_chri​st
votre nouveau dieu
Posté le 29-01-2009 à 11:44:52  profilanswer
 

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

n°1844842
Joel F
Real men use unique_ptr
Posté le 29-01-2009 à 16:24:42  profilanswer
 

prefixage de membreG [:sadnoir]

n°1844843
kyntriad
Posté le 29-01-2009 à 16:26:04  profilanswer
 

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
n°1845080
Stagiaire9
Posté le 30-01-2009 à 09:13:23  profilanswer
 

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()'

n°1845087
kyntriad
Posté le 30-01-2009 à 09:50:22  profilanswer
 

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
n°1845145
Taz
bisounours-codeur
Posté le 30-01-2009 à 11:43:55  profilanswer
 

Il est ou ton vector.o ...

n°1845376
kyntriad
Posté le 30-01-2009 à 21:05:19  profilanswer
 

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
n°1845556
Stagiaire9
Posté le 31-01-2009 à 16:01:33  profilanswer
 

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

n°1845781
jesus_chri​st
votre nouveau dieu
Posté le 01-02-2009 à 12:31:56  profilanswer
 

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.

n°1845784
Joel F
Real men use unique_ptr
Posté le 01-02-2009 à 12:40:48  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Probleme de lieur

 

Sujets relatifs
Probleme changement banniere flash (php-nuke)Problème de requête....
Problème listes chainées (débutant)problème php mysql
Problème de MouseListener sur GraphicalViewer (GEF)probleme jinternalframe
Problème d'URL rewritingProbleme connection BDD
Problème de tag :oDirectShow + Builder 6 => Problème de lieur avec TIME_FORMAT_FRAME
Plus de sujets relatifs à : Probleme de lieur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR