Przekazanie wskaźnika miedzy składowymi klasy i na zewnątrz
Ostatnio zmodyfikowano 2018-04-02 23:22
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 class KGrawler { public: KGrawler(); ~KGrawler(); int * wystaw_wsk; int * wystaw(); private: (...) }
KGrawler.cpp 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 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 |
|
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? |
|
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... :) |
|
Monika90 |
» 2018-04-02 22:44:24 Jak może się kompilować? To przecież jest deklaracja funkcji. |
|
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. |
|
YooSy |
» 2018-04-02 23:22:24 i zapomnialem usunąć nawiasy. |
Dla zapominalskich są nawiasy klamrowe. |
|
« 1 » |