Konwersja wskaźnika na referencję

0

Mam błahy problem:

Przechowuję obiekty jako Obiekt* w wektorze Vec. Potrzebuje je skopiować, ale konstruktor kopiujący przyjmuje argument const Obiekt&.

To wydaje mi się za bardzo przekombinowane... Próbowałem różne metody ale tylko to się kompiluje.

const_cast<const Obiekt&>(*Vec[i])
0

a tak nie możesz?:

inline void foo(const int &r) { 
    cout << &r << "\n" << r << endl;
}

int main()
{
    int *p = new int(2);
    foo(*p);
    return 0;
}
0

Najlepiej jakbyś użył boost::ptr_vector - ale wymaga to użycia dodatkowej biblioteki
http://www.boost.org/doc/libs/1_46_1/libs/ptr_container/doc/examples.html

Innym sposobem (nietestowane) powinieneś dać radę w ten sposób:

Obiekt klon;
klon = Obiekt(*(v[i]));

Lub krócej:
Obiekt klon(*(v[0]));

Oczywiście wiesz, że stosowanie std::vector<Obiekt *> wymaga dodatkowego kasowania przechowywanych elementów?
Coś na ten temat:
http://stackoverflow.com/questions/307082/cleaning-up-an-stl-list-vector-of-pointers

BTW: W przykładzie "blee" jest błąd, wyświetla pointer zamiast wartości.

0
cplus napisał(a)

BTW: W przykładzie "blee" jest błąd, wyświetla pointer zamiast wartości.

Nie wierze. Wyświetla adres oraz wartość w następnej linii.

0
blee napisał(a)
cplus napisał(a)

BTW: W przykładzie "blee" jest błąd, wyświetla pointer zamiast wartości.

Nie wierze. Wyświetla adres oraz wartość w następnej linii.

A tak, racja, za ciągiem "\n" (którego się w C++ zwykle nie używa, zwłaszcza w cout...)

0

"a źle, bo \n i endl to nie to samo. - Azarien dzisiaj, 14:51"
nikt nie napisał, że to jest to samo. Kod napisałem "z palca" i wcale nie chodzi tutaj o ten znak nowej linii, równie dobrze mogła być spacja :) czepiacie się i tyle ;p

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