Reorganisation modulaire et problème
Bonsoir,
J'avais toutes les classes de mon programme dans un seul header,j'ai donc décidé de le rendre modulaire
Mais il y a un soucis dont je ne vois pas la cause ..
Code:
1 2 3 4 5 6
| Undefined symbols for architecture x86_64:
"Vehicule::createVehicule(std::string)", referenced from:
_main in main-aV2PNG.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [main] Error 1 |
main.cpp
Code:
1 2 3 4 5 6 7 8 9 10
| #include <iostream>
#include "Vehicule.h"
int main()
{
Vehicule *v=Vehicule::createVehicule("fr");
presenter(v);
return 0;
} |
Vehicule.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <iostream>
class Vehicule
{
public:
virtual std::string getMarque() const =0;
friend std::ostream &operator<<(std::ostream &o,const Vehicule *v);
static Vehicule* createVehicule(std::string origine);
};
void presenter(const Vehicule *v)
{
std::cout << "Vehicule " << v << std::endl;
}
std::ostream &operator<<(std::ostream &o,const Vehicule *v)
{
return o << v->getMarque();
} |
Vehicule.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11
| #include "Vehicule.h"
#include "CreateurConcretRenault.h"
#include "CreateurConcretFiat.h"
Vehicule* Vehicule::createVehicule(std::string origine)
{
if(origine=="fr") return new CreateurConcretRenault();
else if(origine=="ita") return new CreateurConcretFiat();
else return new CreateurConcretRenault();
} |
CreateurConcretRenault.h
Code:
1 2 3 4 5 6 7 8 9
|
#include <iostream>
#include "Vehicule.h"
class CreateurConcretRenault : public Vehicule
{
public:
std::string getMarque() const;
}; |
CreateurConcretRenault.cpp
Code:
1 2 3 4 5 6
| #include "CreateurConcretRenault.h"
std::string CreateurConcretRenault::getMarque() const
{
return "Renault";
} |
CreateurConcretFiat.h
Code:
1 2 3 4 5 6 7 8
| #include <iostream>
#include "Vehicule.h"
class CreateurConcretFiat : public Vehicule
{
public:
std::string getMarque() const;
}; |
CreateurConcretFiat.h
Code:
1 2 3 4 5 6
| #include "CreateurConcretFiat.h"
std::string CreateurConcretFiat::getMarque() const
{
return "Fiat";
} |