logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C++] Błąd linkera przy zmianie wskaźnika static w klasie stan

201oniw 27 Kwi 2009 13:24 1549 5
REKLAMA
  • #1 6462024
    201oniw
    Poziom 10  
    Posty: 15
    Witam
    Mam problem z zimną static:
    //IStan.h
    #include <iostream>
    #ifndef STAN_H
    #define STAN_H
    
    using namespace std;
    
    class stan
    {
       public:
          static stan * aaa;
          static void f(stan ab)
             {
                aaa= &ab;
             }
          void virtual Drukuj(void)
          {
             cout <<"stan" << endl;
          };
    };
    
    
    class poch1 : public stan
    {
       public:
      
          void Drukuj(void)
          {
             cout << "poch" <<endl;
          };
    };
    #endif
    


    //main.cpp
    #include <iostream>
    #include "stan.h"
    
    using namespace std;
    
    int main()
    {
       stan s;
       poch1 p;
       s.f(p);
       /*s.aaa->Drukuj();
       p.Drukuj();*/
    
       system("PAUSE");
       return 0;
    }
    


    Po skompilowaniu tych 2 plik w Dev c++ 5beta wyskakuj mi :
    [Linker error] undefined reference to `stan::aaa'
    ld returned 1 exit status
    E:\inz\Nowy folder\Makefile.win [Build Error] [Projekt1.exe] Error 1.

    Kod pisałem pod wzorzec Stan, chodzi o to bym miał sobie zmienną static która by mi przechowywała(w zależność od stanu programu) odpowiednią "classe" pochodna. Tu jest tylko jedna klasa pochodna ale tak naprawdę są 3, teraz chyba to bez znaczenia bo i bez tych 2 mi i tak nie działa

    Kod proszę umieszczać w znacznikach [code].
    Proszę poprawić pisownię w temacie i treści postu.
    [Dr.Vee]
  • REKLAMA
  • #2 6462145
    VanThor
    Poziom 19  
    Posty: 224
    Pomógł: 34
    Ocena: 5
    Zamiast:

    
    static void f(stan ab)
    {
        aaa = &ab;
    } 
    


    nie powinno być przypadkiem ;) :

    
    static void f(stan * ab)
    {
        aaa = ab;
    } 
    


    ?

    I wtedy w main:

    
    int main()
    {
        stan s;
        poch1 p;
        s.f( &p );
        s.aaa->Drukuj();  // lub  stan::aaa->Drukuj();
    }
    
  • REKLAMA
  • #3 6462565
    201oniw
    Poziom 10  
    Posty: 15
    :p
    no też tak może być ale wtedy po kompilacji mam takie coś;
    [Linker error] undefined reference to `stan::aaa'
    [Linker error] undefined reference to `stan::aaa'
    [Linker error] undefined reference to `stan::aaa'
    ld returned 1 exit status
  • REKLAMA
  • #4 6462955
    Dr.Vee
    VIP Zasłużony dla elektroda
    Posty: 1784
    Pomógł: 307
    Ocena: 76
    Po raz kolejny upominam autora - proszę poprawić pisownię w pierwszym poście.

    Pozdrawiam,
    Dr.Vee
  • REKLAMA
  • #5 6463474
    KowalD
    Poziom 17  
    Posty: 290
    Pomógł: 13
    Ocena: 3
    az z ciekawosci visuala odpalilem ;)...
    gdy dodasz linijke
    stan* stan::aaa = NULL;
    to powinno sie zlinkowac... ale raczej nie zadziala tak jakbys oczekiwal ;)... ale jesli przekazesz przez wskaznik... tak jak VanThor napisal, to powinno byc lepiej :)...
  • #6 6463686
    201oniw
    Poziom 10  
    Posty: 15
    zadziałało :D
    wielkie dzięki
    :arrow:
REKLAMA