fv param. referencia vektorra: const hibát ad, nem const nem ad hibát kérdés.

Fórumok

Ez a kódrészlet:
(cat vektorKiir.cpp)


#include < iostream>
#include < vector>

using std::cout; using std::endl; using std::vector;

int vektorKiir(const vector <int> & VEK)
    {
    vector<int>::iterator szamlalo_VEK;

    for (szamlalo_VEK=VEK.begin(); szamlalo_VEK != VEK.end(); szamlalo_VEK++)
        {
        cout << *szamlalo_VEK << " " ;
        }

    cout << endl;

    return 0;

    }

Ha a függvényparaméter vektor referencia nem konstansként van megadva:
int vektorKiir(const vector & VEK)
helyett
int vektorKiir(vector & VEK)
akkor nincs hibaüzenet, lefordul a program és rendesen fut is.

Ha fordítom konstans referenciával:
g++ -c *cpp
vektorKiir.cpp: In function 'int vektorKiir(const std::vector >&)':
vektorKiir.cpp:10: error: no match for 'operator=' in 'szamlalo_VEK = ((const std::vector >*)VEK)->std::vector<_Tp, _Alloc>::begin [with _Tp = int, _Alloc = std::allocator]()'
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_iterator.h:634: note: candidates are: __gnu_cxx::__normal_iterator > >& __gnu_cxx::__normal_iterator > >::operator=(const __gnu_cxx::__normal_iterator > >&)

Mi ennek az oka? Mi van a dolog hátterében?

Hozzászólások

Sajnos konstans iterátorral sem működik.
Az volt az első amit próbáltam. Kérdés, hogy ha az iterátor konstans, akkor tulajdonképpen mi is van? Maga az iterátor konstans, vagy amire mutat? Ha az, amire mutat, akkor miért kell konstansnak lennie? Azért, mert így nyilatkoztatik ki, hogy az, amire mutat nem megváltoztatható? Nyilván nem maga az iterátor módosíthatatlan, hiszen akkor mindig ugyanoda mutatna.

Ez a panasz konstans iterátorral:
vektorKiir.cpp: In function 'int vektorKiir(const std::vector >&)':
vektorKiir.cpp:11: error: no match for 'operator=' in 'szamlalo_VEK = ((const st d::vector >*)VEK)->std::vector<_Tp, _Alloc>::begin [wit h _Tp = int, _Alloc = std::allocator]()'
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_iterato r.h:634: note: candidates are: __gnu_cxx::__normal_iterator > >& __gnu_cxx::__normal_iterator > >::operator=(const __gnu_cxx::__normal_iterator > >&)
vektorKiir.cpp:11: error: passing 'const __gnu_cxx::__normal_iterator > >' as 'this' argument of '__gnu_cxx::__normal _iterator<_Iterator, _Container> __gnu_cxx::__normal_iterator<_Iterator, _Contai ner>::operator++(int) [with _Iterator = int*, _Container = std::vector >]' discards qualifiers

Bár valóban, hogy az iterátorról lehagytam a const-ot, más a panasz.
--
unix -- több, mint kód. filozófia.
Life is feudal

http://209.85.129.132/search?q=cache:fJolwh7daXQJ:www.e-source.hu/jenci…

Szóval:
const vector::iterator szamlalo_VEK;
helyett
vector::const_iterator szamlalo_VEK;
Műxik. Ebben az esetben ugye a referenciaként átadott vektor a konstans, azaz nem tudom módosítani a vektort az adott függvényben?
Köszönöm a segítséget!
Guglizok tovább, mert szeretném megérteni azt, amit már tudok használni.
--
unix -- több, mint kód. filozófia.
Life is feudal

Pedig egyszerű. Az a különbség, hogy az iterátor a konstans, vagy az amin iterál.


    const vector<int>::iterator i=v.begin();
    ++i; //nem megy
    *i=3; //megy

    vector<int>::const_iterator ci=v.begin();
    ++ci; //megy
    *ci=3; //nem megy

Ugyanez van mutatókkal is: a "const int*", és az "int* const" nem ugyanaz...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o