#include <iostream>
#include <map>
#include <string>
#include <cstdlib>
using namespace std;
class Shape
{
public :
virtual void draw()=0;
virtual ~Shape(){}
};
class Circle : public Shape
{
string color;
int x;
int y;
int radius;
public:
Circle(string color){
color = color;
}
void setX(int x) {
x = x;
}
void setY(int y) {
y = y;
}
void setRadius(int radius) {
radius = radius;
}
void draw() {
cout << "color :" << color << x << y ;
}
};
class ShapeFactory {
public:
static map<string, Shape*> circlemap;
static Shape* getcircle(string color)
{
Shape *mcircle;
mcircle = circlemap.find(color)->second;
if(mcircle == nullptr) {
mcircle = new Circle(color);
circlemap[color] = mcircle;
// circlemap.insert(std::make_pair(color,mcircle));
}
return mcircle;
}
};
class Flyweightpattern
{
public:
static string getRandomColor(string colors[]) {
int m_rand = rand() % 5;
return colors[m_rand];
}
static int getRandomX() {
return (int)(rand() % 100);
}
static int getRandomY() {
return (int)(rand() % 100);
}
};
int main()
{
string colors[] = { "Red", "Green", "Blue", "White", "Black" };
for(int i=0; i < 20; ++i) {
Circle *circle = dynamic_cast<Circle *>(ShapeFactory::getcircle(Flyweightpattern::getRandomColor(colors)));
circle->setX(Flyweightpattern::getRandomX());
circle->setY(Flyweightpattern::getRandomY());
circle->setRadius(100);
circle->draw();
}
getchar();
return 0;
}
を作成中にエラーを結ぶ得ることは以下の通りです:は、私は、実行時にリンクエラーを取得していますflyweight_pattern
flyweight_pattern.obj:エラーLNK2001:未解決の外部シンボル 「パブリック:静的クラスのstd ::マップ、クラスstd :: allocator>、クラスCircle *、構造体std :: less、クラスstd :: allocator>、クラス std :: allocator、クラスstd :: allocator> const、クラス 円*>>> ShapeFactory :: circlemap " (?circlemap @ ShapeFactory @@ 2V?$ map @ V?$ basic_string @ DU?char_traits @D @ std @@ V?$ allocator @D @ 2 @@ std @@ PAVCir @@@@@@@@@@@ 2 @ V?$ allocator @ U?$ pair @ $ $ CBV?$ basic_string @ DU?$ char_traits @D @ std @@ V?$ allocator @D @ 2 @ std @@ PAVCircle @@@ std @@@ 2 @@ std @A)
私はShapeFactoryクラスのマップを持っていて、クラス自体にマップを塗りつぶしてみましたが、まだ問題を解決できませんでした。あなたはcirclemapを定義されていなかった
静的メンバーを定義するだけです(例:http://cpp.sh/4cznb) –