Cześć, chciałem sobie zobaczyć jak działa builder i dla ćwiczenia napisałem prosty program:
#include <iostream>
#include <string>
class home // Product
{
private:
std::string windows;
std::string walls;
std::string door;
std::string homeType;
public:
home(std::string homeType) {};
void setWalls(std::string walls);
void setWindows(std::string windows);
void setDoor(std::string door);
void print()
{
std::cout << "Home type: " << homeType << "\n";
std::cout << "Walls: " << walls << "\n";
std::cout << "Door: " << door << "\n";
std::cout << "Windows: " << windows << "\n";
}
};
class homeBuilder
{
protected:
home *homeProduct;
public:
virtual void createHome() {};
virtual void buildWindows() {};
virtual void buildWalls() {};
virtual void buildDoor() {};
home* getHome()
{
return homeProduct;
}
};
class smallHomeBuilder : public homeBuilder
{
public:
void createHome()
{
homeProduct = new home("Small home.");
}
void buildWindows()
{
homeProduct->setWindows("4");
}
void buildWalls()
{
homeProduct->setWalls("4");
}
void buildDoor()
{
homeProduct->setDoor("1");
}
};
class bigHomeBuilder : public homeBuilder
{
public:
void createHome()
{
homeProduct = new home("Big home.");
}
void buildWindows()
{
homeProduct->setWindows("20");
}
void buildWalls()
{
homeProduct->setWalls("24");
}
void buildDoor()
{
homeProduct->setDoor("4");
}
};
class direcotr
{
homeBuilder * builder;
public:
home* createHome(homeBuilder *builder)
{
builder->buildDoor();
builder->buildWindows();
builder->buildWalls();
return builder->getHome();
}
};
int main()
{
direcotr myDirector;
smallHomeBuilder smallHomeBuilder;
bigHomeBuilder bigHomeBuilder;
home *small = myDirector.createHome(&smallHomeBuilder);
home *big = myDirector.createHome(&bigHomeBuilder);
small->print();
std::cout << "\n";
big->print();
delete small;
delete big;
}
Ale nie mogę skompilować programu z powodów:
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "public: void __thiscall home::setDoor(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?setDoor@home@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: virtual void __thiscall bigHouseBuilder::buildDoor(void)" (?buildDoor@bigHouseBuilder@@UAEXXZ) Builder E:\Repos\C++\Builder\Builder\main.obj 1
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "public: void __thiscall home::setWalls(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?setWalls@home@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: virtual void __thiscall bigHouseBuilder::buildWalls(void)" (?buildWalls@bigHouseBuilder@@UAEXXZ) Builder E:\Repos\C++\Builder\Builder\main.obj 1
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "public: void __thiscall home::setWindows(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?setWindows@home@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: virtual void __thiscall bigHouseBuilder::buildWindows(void)" (?buildWindows@bigHouseBuilder@@UAEXXZ) Builder E:\Repos\C++\Builder\Builder\main.obj 1
Nie wiedzę nigdzie błędu a on jest gdzieć na pewno, ma ktoś pomysł co jest nie tak?