Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 4.571 pregleda

Najnovija ↓

Singleton, problemi sa nasledjivanjem za singleton 24.01.2007. u 22:51 · pre 240 meseci #1
Zeleo sam da napravim par singletonova koji su medjusobno povezani u asocijaciji i koji nasledjuju jednu klasu (nije bas apstraktna).

singletonovi su ustvari hijerarhijski povezani, svaka klasa je c(in (rank), i svaki c(in ima c(lan koji pokazuje sledec'i c(in.(c(inovi su kao u nekoj singleton listikada )
kada je ispunjen uslov za napredovanje trebalo bi da se poyove f'ja promote koja ce promeniti c(in.
problemi su nastali prilikom implementacije i stvarno nemam blage veze sta je

Pomognite ako boga znate!!!

source:
Code:

class Rank{

protected:
    Rank* superiorRank_;
    int popust_;
    int minLicKupovina_;
    int minGrupKupovina_;

public:
    
    Rank(int, int, int);

    virtual Rank* getInstance()=0;              //ovo je red 13
    virtual bool isForPromotion(int, int)=0;
    friend void promoteMember(Rank*);
};

class Direktor : public Rank{                         //ovo je red 18

private:
    static Direktor* istance;

protected:
    Direktor(int, int, int);

public:
    static Rank* getInstance();
    bool isForPromotion(int a, int b){return false;}


};

Rank::Rank(int popust, int minLicKupovina, int minGrupKupovina){

    popust_ = popust;
    minLicKupovina_ = minLicKupovina;
    minGrupKupovina_ = minGrupKupovina;
}


Direktor* Direktor::istance = 0;

Direktor::Direktor(int popust, int minLicKupovina, int minGrupnaKupovina) : Rank(popust, minLicKupovina, minGrupnaKupovina){

}

Rank* Direktor::getInstance(){

    if(istance == 0)
        istance = new Direktor();// ovo je red 50
    return istance;
}

evo sta kaze kompajler:

--------------------Configuration: proba - Win32 Debug--------------------
Compiling...
rank.cpp
c:\podaci\infosi128\dimi\proba\rank.cpp(50) : error C2259: 'Direktor' : cannot instantiate abstract class due to following members:
c:\podaci\infosi128\dimi\proba\rank.cpp(18) : see declaration of 'Direktor'
c:\podaci\infosi128\dimi\proba\rank.cpp(50) : warning C4259: 'class Rank *__thiscall Rank::getIstance(void)' : pure virtual function was not defined
c:\podaci\infosi128\dimi\proba\rank.cpp(13) : see declaration of 'getIstance'
c:\podaci\infosi128\dimi\proba\rank.cpp(50) : error C2512: 'Direktor' : no appropriate default constructor available
Error executing cl.exe.

rank.obj - 2 error(s), 1 warning(s)
Potpis
7even respect
Re: Singleton, problemi sa nasledjivanjem za singleton 25.01.2007. u 03:02 · pre 240 meseci #2
To ti je zato sto sa statickom funkcijom u Direktor
Code:
static Rank* getInstance();

ne prepisujes virtuelnu funkciju iz klase Rank
Code:
virtual Rank* getInstance()=0;

Tako da ti je u Direktor cista (pure) virtuelna funkcija (virtual Rank* getInstance()=0;) ne definisana pa Direktor ostaje abstraktna klasa.

VS2005 kod mene na slican kod kaze:
Citat:
warning C4526: 'B::getInstance' : static member function cannot override virtual function 'A *A::getInstance(void)'
error C2259: 'B' : cannot instantiate abstract class


Valjda sam se dobro izrazio :D
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme