Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > class factory linking issue

Reply
Thread Tools

class factory linking issue

 
 
Aaron Prillaman
Guest
Posts: n/a
 
      07-23-2004
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
 
Reply With Quote
 
 
 
 
Sharad Kala
Guest
Posts: n/a
 
      07-23-2004

"Aaron Prillaman" <(E-Mail Removed)> wrote in message
news:0o6Mc.31248$SD3.15597@okepread06...
> 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]();
> }
> };


Add this line -
std::map<int,c1*(*)()> factory::load_fns;

-Sharad


 
Reply With Quote
 
 
 
 
John Harrison
Guest
Posts: n/a
 
      07-23-2004

"Sharad Kala" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
>
> "Aaron Prillaman" <(E-Mail Removed)> wrote in message
> news:0o6Mc.31248$SD3.15597@okepread06...
> > 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]();
> > }
> > };

>
> Add this line -
> std::map<int,c1*(*)()> factory::load_fns;
>


In a source file, not a header file.

john


 
Reply With Quote
 
Aaron Prillaman
Guest
Posts: n/a
 
      07-23-2004
John Harrison wrote:
> "Sharad Kala" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
>
>>"Aaron Prillaman" <(E-Mail Removed)> wrote in message
>>news:0o6Mc.31248$SD3.15597@okepread06...
>>
>>>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]();
>>> }
>>>};

>>
>>Add this line -
>>std::map<int,c1*(*)()> factory::load_fns;
>>

>
>
> In a source file, not a header file.
>
> john
>
>

doh!
sorry that should have been obvious..
guess i was just up too late working on this

thanks a lot for the help,
Aaron
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
use class factory to set required class variables? Alan Python 4 01-27-2011 11:45 AM
Abstract factory and Factory pattern C# ASP .Net 4 07-31-2008 03:22 PM
Abstract class linking issue Richard C++ 4 10-12-2006 06:35 PM
maps and class types: extending a class factory Simon Elliott C++ 0 01-11-2005 01:02 PM
Abstract Factory or Factory Method pattern question.... Medi Montaseri C++ 17 09-03-2003 06:50 AM



Advertisments