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)   
|