std::vector::iterator muckt...
-
Hi,
folgeder code:std::vector<AItask> v; ... for (std::vector<AItask>::iterator i = reservations.begin(); i != reservations.end(); i++)folgende fehlerlendung:
**** Build of configuration rel for project pXai ****
mingw32-make all
'Building file: ../src/AIcalendar.cpp'
'Invoking: GCC C++ Compiler'
g++ -O2 -g -Wall -c -fmessage-length=0 -MMD -MP -MF"src/AIcalendar.d" -MT"src/AIcalendar.d" -o"src/AIcalendar.o" "../src/AIcalendar.cpp"
C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator.h: In constructor\_\_gnu\_cxx::\_\_normal\_iterator<\_Iterator, \_Container>::\_\_normal\_iterator(const \_\_gnu\_cxx::\_\_normal\_iterator<\_Iter, \_Container>&) [with \_Iter = const AItask*, \_Iterator = AItask*, \_Container = std::vector<AItask, std::allocator<AItask> >]': ../src/AIcalendar.cpp:116: instantiated from here C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/stl_iterator.h:609: error: invalid conversion from \const AItask* const' to `AItask*'
mingw32-make: *** [src/AIcalendar.o] Error 1das sieht schon ma sehr aufgeräumt aus... zu info: AIcalendar.cpp ist das oben gezeigte file. besagte zeile 116 ist dort, wo der for-loop anfängt.
es hängt definitiv zusammen mit der deklaration
std::vector<AItask>::iterator i;nur, was geht daran denn nit?!
-
was ist mit reservations? zufällig ein std::vector<AItask> const& ?
-
wie meinst du das?
Naja, wie der Vector deklariert ist, steht ja oben, nix const oä. und auch schon die deklaration std::vector<AItask>::iterator i; macht das problem...
-
piXelshooter schrieb:
Naja, wie der Vector deklariert ist, steht ja oben, nix const oä.
Da steht nur, was v ist. Camper hatte nach reservations gefragt. Es deutet nämlich alles darauf hin, dass dieser vector const ist.
-
sry.
was meint ihr mit reservations?
-
piXelshooter schrieb:
sry.
was meint ihr mit reservations?Den vector, dessen begin- und end-Methode du da aufrufst. Der Bezeichner stammt aus deinem Code.
-
piXelshooter schrieb:
sry.
was meint ihr mit reservations?piXelshooter schrieb:
... = reservations....Gruß,
Simon2.
-
omg sry... dachte das hätte iwas mit dem speichermanagement im vektor zu tun, völlig verpeilt, dass mein vektor ja reservations HEIßT -__-°
std::vector<AItask> reservations; ... for (std::vector<AItask>::iterator i = reservations.begin(); i != reservations.end(); i++)das sind die relevanten codestücke.
aber auch wenn ich nur:std::vector<AItask>::iterator i;schreibe, erhalte ich besagte fehlermeldung.
-
wie sieht die Definition von AItask aus?
-
class AItask { public: AItask(); ~AItask(); bool operator <(AItask& cmp); AItimeInterval interval; // TODO private private: unsigned char priority; AIabstractAction* toDo; };Welche Eigenschaft könnte den verantwortlich dafür sein?
-
Hi,
ich weiß nicht, ob's daran liegt, aber irgendwie würde ich den operator<() "doppelt const" (
operator<( .... const&) const;) deklarieren...
Ansonsten gilt halt: Das Teil muss kopierbar sein - und damit auch alle seine Elemente (z.B. AItimeInterval).
Worauf zeigt eigentlichAIabstractAction* toDo... nachdem ein Objekt kopiert wurde ? Auf ein "externes Objekt" - dann wäre das in Ordnung. Wenn es aber "irgendwie" auf "irgendetwas" innerhalb des AItask-Objekts zeigt, braucht's einen entsprechend intelligenten CopyConstr/operator=().
Gilt auch anders herum: Wenn irgendein Objekt "außerhalb der AItask" auf ein AItask-Objekt zeigt, verliert dieser Verweis seine Gültigkeit, sobald dieses Objekt verschoben wird.... und das tut std::vector halt bisweilen.Gruß,
Simon2.