GCC, ich liebe dich.

Hinweise auf besondere Websites, Vorstellung eigener Websites, Internet-Smalltalk
Antworten
Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

GCC, ich liebe dich.

Beitrag von fat-lobyte » So Jul 24, 2011 5:52 pm

Code: Alles auswählen

In file included from /home/alexander/nuke-ms/test/common/test_segmentationlayer.cpp:4:0:
/home/alexander/nuke-ms/include/msglayer.hpp: In member function 'ByteOutputIterator nuke_ms::SerializedData::fillSerialized(ByteOutputIterator) const [with ByteOutputIterator = __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char> >]':
/home/alexander/nuke-ms/include/msglayer.hpp:477:42:   instantiated from 'ByteOutputIterator nuke_ms::SegmentationLayer<InnerLayer>::fillSerialized(ByteOutputIterator) const [with ByteOutputIterator = __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char> >, InnerLayer = nuke_ms::SerializedData]'
/home/alexander/nuke-ms/test/common/test_segmentationlayer.cpp:32:29:   instantiated from here
/home/alexander/nuke-ms/include/msglayer.hpp:325:75: error: invalid use of void expression
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/stl_algobase.h:67:0,
                 from /usr/lib/gcc/x86_64-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/char_traits.h:41,
                 from /usr/lib/gcc/x86_64-redhat-linux/4.6.0/../../../../include/c++/4.6.0/ios:41,
                 from /usr/lib/gcc/x86_64-redhat-linux/4.6.0/../../../../include/c++/4.6.0/ostream:40,
                 from /usr/lib/gcc/x86_64-redhat-linux/4.6.0/../../../../include/c++/4.6.0/iostream:40,
                 from /home/alexander/nuke-ms/test/common/test_segmentationlayer.cpp:1:
/usr/lib/gcc/x86_64-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/stl_iterator_base_funcs.h: In function 'void std::__advance(_RandomAccessIterator&, _Distance, std::random_access_iterator_tag) [with _RandomAccessIterator = const __gnu_cxx::__normal_iterator<const unsigned char*, std::vector<unsigned char> >, _Distance = long int]':
/usr/lib/gcc/x86_64-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/stl_iterator_base_funcs.h:175:7:   instantiated from 'void std::advance(_InputIterator&, _Distance) [with _InputIterator = const __gnu_cxx::__normal_iterator<const unsigned char*, std::vector<unsigned char> >, _Distance = long unsigned int]'
/home/alexander/nuke-ms/include/msglayer.hpp:325:75:   instantiated from 'ByteOutputIterator nuke_ms::SerializedData::fillSerialized(ByteOutputIterator) const [with ByteOutputIterator = __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char> >]'
/home/alexander/nuke-ms/include/msglayer.hpp:477:42:   instantiated from 'ByteOutputIterator nuke_ms::SegmentationLayer<InnerLayer>::fillSerialized(ByteOutputIterator) const [with ByteOutputIterator = __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char> >, InnerLayer = nuke_ms::SerializedData]'
/home/alexander/nuke-ms/test/common/test_segmentationlayer.cpp:32:29:   instantiated from here
/usr/lib/gcc/x86_64-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/stl_iterator_base_funcs.h:154:7: error: passing 'const __gnu_cxx::__normal_iterator<const unsigned char*, std::vector<unsigned char> >' as 'this' argument of '__gnu_cxx::__normal_iterator<_Iterator, _Container>& __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator+=(const difference_type&) [with _Iterator = const unsigned char*, _Container = std::vector<unsigned char>, __gnu_cxx::__normal_iterator<_Iterator, _Container> = __gnu_cxx::__normal_iterator<const unsigned char*, std::vector<unsigned char> >, __gnu_cxx::__normal_iterator<_Iterator, _Container>::difference_type = long int]' discards qualifiers [-fpermissive]
make[3]: *** [test/common/CMakeFiles/test_segmentationlayer.dir/test_segmentationlayer.cpp.o] Error 1
make[2]: *** [test/common/CMakeFiles/test_segmentationlayer.dir/all] Error 2
make[1]: *** [test/CMakeFiles/testsuite.dir/rule] Error 2
make: *** [testsuite] Error 2

:cry:
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: GCC, ich liebe dich.

Beitrag von fat-lobyte » So Jul 24, 2011 6:02 pm

Ok.

std::advance() auf einen konstanten iterator anzuwenden ist nicht sehr Klug. Trotzdem finde ich, ist die Fehlermeldung etwas heftig ausgefallen :-/
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: GCC, ich liebe dich.

Beitrag von cloidnerux » So Jul 24, 2011 6:10 pm

Wo wäre sonst der spaß :D ?
Aber es ist schon heftig, sowas hab ich selbst noch nicht erlebt.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: GCC, ich liebe dich.

Beitrag von Kerli » So Jul 24, 2011 7:17 pm

Es ist doch schön aufgelistet wie und woher die Instantiierung genau erfolgt ist ;) Wenn du das in einer IDE machst dann wird dir vermutlich einfach die Stelle markiert an der das aufgetreten ist und du siehst sofort was nicht passt.

Bei Templates hat man irgendwie oft das Problem das man leicht von den Fehlermeldungen erschlagen wird; Einfach weil die Typnamen oft sehr lange werden. Normalerweise reicht es aber einfach den Typteil weglassen und hat eine klare Fehlermeldung.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: GCC, ich liebe dich.

Beitrag von Xin » Mo Jul 25, 2011 8:45 am

Gute Fehlermeldungen zu generieren ist gar nicht so einfach.
Die Fehlermeldungen des GCC finde ich aber aussagekräftiger als die von Visual C++.
Beide gehen unterschiedliche Wege: VS versucht die Information für die Fehlerliste in eine Zeile reinzupressen und hat bei Templates in der Compilerausgabe ein paar Zusatzinformationen, der GCC gibt ausführlich Auskunft, wo das Problem ist.

Beim VS sitze ich oft da und verstehe die Fehlermeldung nicht, weil mir Informationen fehlen, beim GCC sitze ich gelegentlich da und suche die Fehlermeldung in einer Unmenge an Informationen und gerade so ein kleines "const" kann in seitenlangen Meldungen mal verloren gehen. Das Problem sitzt vor dem Bildschirm, dass nach zwei Zeilen aufhört zu lesen und die Information zu suchen, in dem es diagonal über den Text springt.
Ich muss mich dann auch zwingen, wirklich zu lesen.

Von daher: GCC, ich liebe Dich passt schon, Visual Studio 10 hat mich was so ein fehlendes const angeht jedenfalls schon sehr im Regen stehen lassen: "Funktion existiert nicht". Aber ich sehe sie ja. Datei nicht eingebunden?

Kein template<...>::bla() const nicht gefunden, "candidate is template<...>::bla()"
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten