Я знаю, что мне не хватает одной из тех деталей, которые вы не можете просто заметить, а затем через месяц она поражает вас «Эврика!».Абстрактная фабрика - получение сообщения об ошибке смерти LKN2019
В принципе, мне нужно реализовать абстрактный заводский класс для фигур, но я продолжаю получать сообщение об ошибке LKN2019, связанное с .obj, созданным на основе моего заводского кода формы.
Это выглядит немного как это:
shapefactory.h
#ifndef SHAPEFACTORY_H__
#define SHAPEFACTORY_H__
#include <iostream>
#include <map>
#include <string>
#include "shape.h"
#include "circle.h"
#include "rectangle.h"
#include "triangle.h"
using namespace std;
typedef Shape *(createShapeFunction)(void);
class ShapeFactory
{
public:
static void registerFunction(const string &, const createShapeFunction *);
static Shape *createShape(const string &);
static Shape *createShape(istream &);
private:
static map <string, createShapeFunction *> creationFunctions;
ShapeFactory();
static ShapeFactory *getShapeFactory();
};
#endif
shapefactory.cpp
#include "shapefactory.h"
void ShapeFactory::registerFunction(const string & ID, const crateShapeFunction * CR)
{
creationFunctions[ID] = CR;
}
Shape* ShapeFactory::createShape(const string & shapeName)
{
map <string, crateShapeFunction *>::iterator it = creationFunctions.find(shapeName);
if(it != creationFunctions.end())
return it->second();
return NULL;
}
Shape* ShapeFactory::createShape(istream & in)
{
string shapeName;
cout << "Desired figure: ";
in >> shapeName;
map <string, crateShapeFunction *>::iterator it = creationFunctions.find(shapeName);
if(it != creationFunctions.end())
return it->second();
return NULL;
}
ShapeFactory::ShapeFactory()
{
registerFunction("circle", &Circle::Create);
registerFunction("rectangle", &Rectangle::Create);
registerFunction("triangle", &Triangle::Create);
}
ShapeFactory* ShapeFactory::getShapeFactory()
{
static ShapeFactory instance;
return &instance;
}
я, наверное, облажались где-то в реализации методов, но я просто не может видеть, где. Будем очень благодарны за любую своевременную помощь.
Edit: Ошибки выглядела как этот
Error 4 ошибки LNK2001: неразрешенный внешний символ «частный: статический класс зОго :: Карта, класс зОго ::>, распределитель класс Shape * (__cdecl *) (пустота), struct std :: less, class std :: allocator>>, class std :: allocator, class std :: allocator> const, class Shape * (__cdecl *) (void)>>> ShapeFactory :: creationFunctions "(? creationFunctions @ ShapeFactory @@ 0В? $ Карта @ V? $ basic_string @ DU? $ char_traits @ D @ станд @@ V? $ распределитель @ D @ 2 @@ станд @@ P6APAVShape @@ XZU? $ меньше @ V? $ basic_string @DU? $ char_traits @ D @ станд @@ V? $ распределитель @ D @ 2 @@ станд @@@ 2 @ V? $ распределитель @ U? $ пара @ $$ ОЦК? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@ P6APAVShape @@ XZ @ std @@@ 2 @@ std @@ A) C: \ Proj1 \ shapefactory.obj
, прежде чем определять карту в моем заголовке, как предложил alexrider. Спасибо, сейчас работает.
Пожалуйста, включите ** сообщение об ошибке ** **. «LKN2019» - это только часть полученного вами сообщения. –
Выполнение 'using namespace std;' в файлах заголовков может сильно удивить в ближайшее время. –