A
Aaron Prillaman
I'm trying to set up a class factory for loading classes from a
database. Each table will be loaded into it's own class with a common
base. Just thought I'd try a simple sample first, but I'm having
trouble getting it to link. Here's the code and output:
class c1{
public:
virtual void fn()=0;
};
class factory{
private:
static std::map<int,c1*(*)()> load_fns;
public:
factory(int key,c1*(*pfn)()){
load_fns.insert(std::make_pair(key,pfn));
}
static c1* Make(int key){
return load_fns[key]();
}
};
class c2 : public c1{
public:
void fn(){ std::cout << "running c2 fn\n";}
static c1* ld(){return new c2;}
static factory f;
};
factory c2::f(2,&c2::ld);
class c3 : public c1{
public:
void fn(){ std::cout << "running c3 fn\n";}
static c1* ld(){return new c3;}
static factory f;
};
factory c3::f(3,&c3::ld);
int main(int argc, char *argv[]){
c1* pc = factory::Make(2);
c1* pc2 = factory::Make(3);
pc->fn();
pc2->fn();
delete pc;
delete pc2;
return 0;
}
main.obj : error LNK2001: unresolved external symbol "private: static
class std::map<int,class c1 * (__cdecl*)(void),struct
std::less<int>,class std::allocator<class c1 * (__cdecl*)(void)> >
factory::load_fns" (?load_fns@factory@@0V?$map@HP6APAVc1@@
XZU?$less@H@std@@V?$allocator@P6APAVc1@@XZ@3@@std@@A)
Release/test.exe : fatal error LNK1120: 1 unresolved externals
database. Each table will be loaded into it's own class with a common
base. Just thought I'd try a simple sample first, but I'm having
trouble getting it to link. Here's the code and output:
class c1{
public:
virtual void fn()=0;
};
class factory{
private:
static std::map<int,c1*(*)()> load_fns;
public:
factory(int key,c1*(*pfn)()){
load_fns.insert(std::make_pair(key,pfn));
}
static c1* Make(int key){
return load_fns[key]();
}
};
class c2 : public c1{
public:
void fn(){ std::cout << "running c2 fn\n";}
static c1* ld(){return new c2;}
static factory f;
};
factory c2::f(2,&c2::ld);
class c3 : public c1{
public:
void fn(){ std::cout << "running c3 fn\n";}
static c1* ld(){return new c3;}
static factory f;
};
factory c3::f(3,&c3::ld);
int main(int argc, char *argv[]){
c1* pc = factory::Make(2);
c1* pc2 = factory::Make(3);
pc->fn();
pc2->fn();
delete pc;
delete pc2;
return 0;
}
main.obj : error LNK2001: unresolved external symbol "private: static
class std::map<int,class c1 * (__cdecl*)(void),struct
std::less<int>,class std::allocator<class c1 * (__cdecl*)(void)> >
factory::load_fns" (?load_fns@factory@@0V?$map@HP6APAVc1@@
XZU?$less@H@std@@V?$allocator@P6APAVc1@@XZ@3@@std@@A)
Release/test.exe : fatal error LNK1120: 1 unresolved externals