[C++] wyciąganie właściwości statycznej przez inną klasę


(pain3hp) #1

Witam nie rozumiem dlaczego nie mogę wyciągnąć sobie przez klasę A statycznej właściwości na dodatek publicznej z klasy B?

class A 

{

public: void pokaz_liczbe(); 

};

void A::pokaz_liczbe()

{

 cout<
}

class B 

{

public: static int liczba; 

};

int B::liczba = 1; //globalizacja

wywala mi w klasie A podczas wywołania a funkcja main mi pokaze tą liczbe takim samym wywołaniem

cout<

czy ktoś może mi to wytłumaczyć oraz zaproponować rozwiązanie problemu, potrzebuję jakoś pobrać tą zmienną statyczną do innej klasy..

Dzięki


(Sawyer47) #2

A jak jest z kolejnością deklaracji klas / dołączaniem nagłówków? Podejrzewam, że w tym tkwi problem.


(pain3hp) #3

w main.cpp wygląda to tak

#include "b.h"

#include "a.h"

([alex]) #4

Pewnie klasę B zadeklarowałeś po klasie A.

Przenieś funkcję void A::pokaz_liczbe() po deklaracji klasy B, bo inaczej skąd niby kompilator ma wiedzieć czym jest to B i czym jest ta liczba w tym B.


(pain3hp) #5

próbowałem zmieniać, to nie o to chodzi...

-- Dodane 16.10.2010 (So) 14:33 --

skoro najpierw includuję klasę B to czemu ma nie wiedzieć ?


(Sawyer47) #6

Jeśli wrzucić kod do 1 pliku, gdzie najpierw występuje klasa B, następnie A, to się kompiluje. Komunikat sugeruje, że najpierw kompilator napotyka się na deklarację klasy A i "nie wie" czym jest B::liczba.


(pain3hp) #7

ja niestety nie mogę tego trzymać w 1 pliku, dziwny problem bo implementuję klasy wydaje mi się że w odpowiedniej kolejności

-- Dodane 16.10.2010 (So) 14:37 --

hmm ja wczytuję pliki .h a jak to jest z kolejnością .cpp ?

skład plikow mam proponowamy przez wxDev czyli klasa w .h a funkcje klasy w .cpp i owa funkcja jest wlasnie w a.cpp


(etam) #8

plik A.h

class A

{

    public:

        void pokaz_liczbe();

};

plik A.cpp

#include "A.h" 

#include "B.h" 

#include 

using namespace std;


void A::pokaz_liczbe()

{

    cout << B::liczba;

}

plik B.h

class B

{

    public:

        static int liczba;

};

plik B.cpp

#include "B.h" 


int B::liczba = 1;

(pain3hp) #9

dzięki za pomoc, o to mi chodziło, przy okazji chciałbym zapytać jak stworzyć globalny obiekt?


([alex]) #10

Skoro nie chcesz przyznać się jak porozrzucałeś swój kod to szukaj błędu sam:

a.h:

#include "b.h"

(etam) #11

Do pliku A.cpp dopisać

A a;

Do pliku A.h dopisać

extern A a;