Zwracanie wartości rozmiaru wektora przez referencje - błędna wartość

Odpowiedz Nowy wątek
2018-05-06 21:15

Rejestracja: 3 lata temu

Ostatnio: 2 tygodnie temu

0

Cześć,
mam sobie wektor w klasie A:

std::vecor<int> vec;

i zwracam jego rozmiar metodą MetodaA za pomocą referencji:

const unsigned& Size() const { return vec.size(); }

Problem w tym, że jak wywołuję tą metodę w innej metodzie np. klasy B:

void MetodaB { 
A a;
C c;
c.MetodaC(a.MetodaA());
}

gdzie MetodaC klasy C:

void MetodaC(unsigned value)
{
//...
}

value ma zapisaną błędną wartość. Dlaczego tak się dzieje? MetodaB widzi prawidłową wartość. Czy MetodaC nie powinna dostać kopię tej wartości?

edytowany 1x, ostatnio: furious programming, 2018-05-06 22:23

Pozostało 580 znaków

2018-05-06 21:23

Rejestracja: 7 lat temu

Ostatnio: 12 godzin temu

Lokalizacja: Kraków

2

const unsigned& też powinno działać, chociaż właściwym rozwiązaniem jest size_t - przez kopie. Musisz pokazać faktyczny kod.


Pozostało 580 znaków

2018-05-06 21:46

Rejestracja: 3 lata temu

Ostatnio: 2 tygodnie temu

0

Ręce opadają, próbuję pomóc znajomemu u którego poniższy kod nie działa i w sumie sam nie wiem czemu.
Teraz sprawdziłem u siebie i działa bez problemu ^.^

Kod:

#include <iostream>
#include <vector>

class A
{
public:
    A() { a = { 1, 2, 3 }; }
    const size_t& methodA() const { return a.size(); }

private:
    std::vector<int> a;
};

class C
{
public:
    void methodC(unsigned value)
    {
        std::cout << value << std::endl;
    }
};

class B
{
public:
    void methodB()
    {
        A a;
        C c;
        c.methodC(a.methodA());
    }
};

void main()
{
    B b;
    b.methodB();
    system("pause");
}

Może jakiś bug u niego występuje, jutro przejdę się do niego i zrobimy testy jeszcze raz...
Wartość value jakby stała się adresem ? Albo obiekt przestał istnieć i w funkcji metodaC ląduje losowa wartość...

#edit
wysyłając wartość metody metodaA przez kopie działało dobrze.

edytowany 2x, ostatnio: Focusx, 2018-05-06 21:50

Pozostało 580 znaków

Odpowiedz

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