Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przekazanie wskaźnika miedzy składowymi klasy i na zewnątrz

Ostatnio zmodyfikowano 2018-04-02 23:22
Autor Wiadomość
Bastian
Temat założony przez niniejszego użytkownika
Przekazanie wskaźnika miedzy składowymi klasy i na zewnątrz
» 2018-04-02 21:19:53
Hej,
Potrzebuje wystawić wskaźnik zainicjowany w w klasie, następnie w innej metodzie tej klasy przypisuje wartość pod ten wskaźnik, a następnie jest on z tej metody zwracany na zewnątrz instancji klasy

KGrawler.h
C/C++
class KGrawler
{
public:
    KGrawler();
    ~KGrawler();
    int * wystaw_wsk;
    int * wystaw();
   
private:
    (...)
   
}

KGrawler.cpp
C/C++
KGrawler::KGrawler()
{
}

KGrawler::~KGrawler()
{
}

int * KGrawler::wystaw() {
   
    * wystaw_wsk = 5;
    std::cout << "To adres wskaźnika wystaw_wsk: " << wystaw_wsk << std::endl;
    return wystaw_wsk;
}

main.cpp
C/C++
int main( int argc, char ** argv )
{
   
    KGrawler Crawl();
    std::cout << * Crawl.wystaw() << std::endl;
   
}

Kod mi się kompiluje ale dostaje


Segmentation fault

Dlaczego? No i jak to w takim razie zrobić poprawnie. Dodam tylko, że chciałbym coś takiego zrobić nie dla int a dla mapy std::map<std::string, boost::any> , ale pierw ćwicze na prostszym typie...

Pozdrawiam
P-170413
jankowalski25
» 2018-04-02 21:38:39
1. Dlaczego pole
int * wystaw_wsk;
 jest publiczne?
2. Dlaczego nie przypisujesz temu wskaźnikowi prawidłowego adresu przed zapisaniem tam jakiejś wartości?
P-170414
Bastian
Temat założony przez niniejszego użytkownika
» 2018-04-02 22:23:35
@jankowalski25
Tak. Powinno być prywatne, to przyklad na szybko wystrugany. Czyli "Segrmentation fault" wynikał z faktu, iż chciałem przypisać wartość pod wskaźnik, którego adres był niedostępny dla programu tak? Owczywiscie jak zainicjowalem wartością to zadziałało... :)
P-170417
Monika90
» 2018-04-02 22:44:24
Jak może się kompilować?
C/C++
KGrawler Crawl();
To przecież jest deklaracja funkcji.
P-170421
Bastian
Temat założony przez niniejszego użytkownika
» 2018-04-02 23:19:47
@Monika90

Tak. Uprościłem mój kod na potrzeby przykładu i zrobiłem babola. W moim programie inicjuje obiekt wykorzystująć konstruktor przyjmujący parametr, ale na potrzeby mojego problemu uprościłem i zapomnialem usunąć nawiasy.
P-170424
YooSy
» 2018-04-02 23:22:24
i zapomnialem usunąć nawiasy.
Dla zapominalskich są nawiasy klamrowe.
C/C++
KGrawler Crawl { };
P-170426
« 1 »
  Strona 1 z 1