重组模块后出错

Error after reorganization modulaire

本文关键字:出错 模块 重组      更新时间:2023-10-16

我在模块化程序中转换了我的程序,因为所有程序都在一个头中。但是现在有一个问题我不知道。。

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

#include <iostream>
#include "Vehicule.h"
int main()
{
Vehicule *v=Vehicule::createVehicule("fr");
presenter(v);
return 0;
}

vehicule.h

#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();
}

车辆.cpp

#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();
}

CreateurConcreteRault.h

#include <iostream>
#include "Vehicule.h"
class CreateurConcretRenault : public Vehicule
{
public:
std::string getMarque() const;
};

CreateurConcreteRenalt.cpp

#include "CreateurConcretRenault.h"
std::string CreateurConcretRenault::getMarque() const
{
return "Renault";
}

CreateurConcreteFiat.h

#include <iostream>
#include "Vehicule.h"
class CreateurConcretFiat : public Vehicule
{
public:
std::string getMarque() const;
};

CreateurConcreteFiat.cpp

#include "CreateurConcretFiat.h"
std::string CreateurConcretFiat::getMarque() const
{
return "Fiat";
}

您使用的是std::string,但从未包含<string>

我试图将所有内容放在一个标题中,结果成功了。。

所以我想我忘了什么