Zwracanie obiektu klasy przez metodę

0

Witam, mysle ze sam kod wyjasnia wszystko w raz z komentarzami jesli chodzi o moj problem :)
Zrobienie funkcji WczytajLiczby jako metody klasy L nic nie zmienia, zaprzyjaznienie jej tez.
Nie wiem co tutaj nie gra.

 class L { // tak wyglada klasa
int  * tab;

public : 
L (int rozmiar);

};

//konstruktor 
L::L(int rozmiar){
tab=new int[rozmiar];
}

L Wczytaj() {

//tutaj dowiaduje sie o tym jaki bede chcial rozmiar, wiec
L obiekt(size); // gdzie w polu size mam wartosc

return obiekt; // dostaje komunikat undeclared indetifier 

}


 int main(){
// tutaj wywoluje metode wczytaj, chcialbym tez aby zwróciła mi tutaj obiekt, który wewnatrz jej jest tworzony. 

Wczytaj();



}
1

Ta funkcja nie może wywołać prywatnego konstruktora L tak w ogóle.

0

dotyczy linii w której zwracam return obiekt, napisałem w komentarzu do kodu przecież.....
zmienna size jest na pewno utworzona

0

wklej caly kod

http://ideone.com/XMgj1P

cos robisz zle.

0

Tylko u mnie pole int * tab; jest w sekcji private.

1

To jest twój kod nawet bez formatowania: http://ideone.com/dwVh3L więc co ci nie działa?

0
     class L { // tak wyglada klasa
    int * tab;
     
    public :
    L (int rozmiar);
     
    };
     
    //konstruktor
    L::L(int rozmiar){
    tab=new int[rozmiar];
    }
     
    L Wczytaj() {
    int size=10;
    //tutaj dowiaduje sie o tym jaki bede chcial rozmiar, wiec
    L obiekt(size); // gdzie w polu size mam wartosc
     
    return obiekt; // dostaje komunikat undeclared indetifier
     
    }
     
     int Funkcja ( L & obiekt2){

//tutaj trace dostep do pol obiekt2, nie wiem dlaczego ? Przeciez biore przez referencje , a np :
obiekt2.ZwrocWartosc(); // tutaj juz NIE zadziala
}


    int main(){
   
     
   L obiekt2=Wczytaj();  // tutaj mi zwraca i jest ok 
  //tutaj moje wywolywac metody na obiekt2 ,np : 
obiekt2.ZwrocWartosc(); // zadziala
Funkcja(obiekt2);  // przesylam obiekt do innej fuknkcji 
     
     
     
    } 
1

glupoty piszesz

http://ideone.com/aE9PfM

dodalem jedynie Twoja funkcje
zwrocWartosc do klasy reszta pozostaje taka sama.

Moze poczytaj o zasiegu widocznych zmian. Moze tez poczytaj o klasach. A przede wszystkim przeczytaj o formatowaniu

0
return L(size);
0

jak chcesz zwrócić obiekt z funckji, w której on powstaje to musi być on zainicjowany na "heap", czyli musi być to wskaźnik, inaczej zostanie zniszczony po wyjsciu ze scope funckji;

1

Zalecanym sposobem zwracania obiektu z funkcji jest zwrócenie przez wartość (czyli całego obiektu, a nie wskaźnika) obiektu utworzonego wewnątrz funkcji na stosie.
Nic nam nie zginie, bo zwracamy obiekt. Jak mógłby nam z rąk zniknąć?

Nie wolno natomiast zwracać wskaźnika ani referencji do obiektu utworzonego w funkcji na stosie, bo obiekt ten ginie w momencie wyjścia z funkcji - i nasz wskaźnik stanie się g…o warty.

Można zwrócić wskaźnik do obiektu utworzonego na stercie – ale wtedy pojawia się problem kto i kiedy ma pamiętać o zwolnieniu tego obiektu. Kiepski pomysł.

1 użytkowników online, w tym zalogowanych: 0, gości: 1