home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.c++.moderated      Moderated discussion of C++ superhackery      33,346 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 31,395 of 33,346   
   Vinesh S to All   
   Linker error : child class on singleton    
   24 Aug 11 16:44:20   
   
   ca8ce48d   
   From: vinesh2681@gmail.com   
      
   Hello all,   
      
   This is my first message to the group.   
      
   I have  a question where i derive 2 child classes which are of   
   singleton pattern from an abstract base class.   
      
   Code:   
      
   //********************************************** test1.h   
   *******************************//   
   #include    
   using namespace std;   
      
   class CPolygon {   
     protected:   
       int width, height;   
     public:   
       CPolygon(){};   
       virtual ~CPolygon(){};   
       void set_values (int a, int b)   
         { width=a; height=b; }   
       virtual int area (void) = 0;   
       void printarea (void)   
         { cout << this->area() << endl; }   
      
     };   
      
   class CRectangle: public CPolygon {   
     public:   
       int area (void)   
         { return (width * height); }   
       static CRectangle* GetInstance()   
         { if (!rectanglePtr) rectanglePtr = new CRectangle(); return   
   rectanglePtr; }   
     ~CRectangle();   
     protected:   
           CRectangle();   
           static CRectangle* rectanglePtr;   
           CRectangle(CRectangle const&){};   
           CRectangle& operator=(CRectangle&){};   
     };   
      
   CRectangle* CRectangle::rectanglePtr = NULL;   
      
   class CTriangle: public CPolygon {   
     public:   
       int area (void)   
         { return (width * height / 2); }   
      
       static CTriangle* GetInstance()   
         { if (!trianglePtr) trianglePtr = new CTriangle(); return   
   trianglePtr; }   
     ~CTriangle();   
     protected:   
       CTriangle();   
       static CTriangle* trianglePtr;   
       CTriangle(CTriangle const&){}   
       CTriangle& operator=(CTriangle&){};   
     };   
      
   CTriangle* CTriangle::trianglePtr = NULL;   
      
   //******************************************* test1.cpp   
   *******************//   
   #include "test1.h"   
      
   int main (void)   
   {   
     CPolygon *ppoly1 = CRectangle::GetInstance();   
     CTriangle *ppoly2 = CTriangle::GetInstance();   
     ppoly1->set_values (4,5);   
     ppoly2->set_values (4,5);   
     ppoly1->printarea();   
     ppoly2->printarea();   
     delete ppoly1;   
     delete ppoly2;   
     return 0;   
   }   
      
   so when i compile and link them   
      
   this is the error am looking at ....   
      
   [root@Krea-TV-DT1 IMGAdapter]# g++ -o test1.out test1.o   
   test1.o: In function `CRectangle::GetInstance()':   
   test1.cpp:   
   (.text._ZN10CRectangle11GetInstanceEv[CRectangle::GetInstance()]+0xa):   
   undefined reference to `CRectangle::rectanglePtr'   
   test1.cpp:   
   (.text._ZN10CRectangle11GetInstanceEv[CRectangle::GetInstance()]   
   +0x26): undefined reference to `CRectangle::CRectangle()'   
   test1.cpp:   
   (.text._ZN10CRectangle11GetInstanceEv[CRectangle::GetInstance()]   
   +0x47): undefined reference to `CRectangle::rectanglePtr'   
   test1.cpp:   
   (.text._ZN10CRectangle11GetInstanceEv[CRectangle::GetInstance()]   
   +0x4c): undefined reference to `CRectangle::rectanglePtr'   
   test1.o: In function `CTriangle::GetInstance()':   
   test1.cpp:(.text._ZN9CTriangle11GetInstanceEv[CTriangle::GetInstance()]   
   +0xa): undefined reference to `CTriangle::trianglePtr'   
   test1.cpp:(.text._ZN9CTriangle11GetInstanceEv[CTriangle::GetInstance()]   
   +0x26): undefined reference to `CTriangle::CTriangle()'   
   test1.cpp:(.text._ZN9CTriangle11GetInstanceEv[CTriangle::GetInstance()]   
   +0x47): undefined reference to `CTriangle::trianglePtr'   
   test1.cpp:(.text._ZN9CTriangle11GetInstanceEv[CTriangle::GetInstance()]   
   +0x4c): undefined reference to `CTriangle::trianglePtr'   
   collect2: ld returned 1 exit status   
      
   Please let me know as to what mistake am i doing .   
      
   Thanks,   
      
   Vinesh.S   
      
      
   --   
         [ See http://www.gotw.ca/resources/clcm.htm for info about ]   
         [ comp.lang.c++.moderated.    First time posters: Do this! ]   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca