CPP_userx schrieb:
z.B. bei der Deklaration:
friend bool operator == <>(const slice_iter<T>&p, const slice_iter<T>&q);
gleich drei Fehler:
/home/lxuser/Documents/neural/gross_Smart/sanndra/sanndra/slice_itr.h|87|error: declaration of ‘operator==’ as non-function|
/home/lxuser/Documents/neural/gross_Smart/sanndra/sanndra/slice_itr.h|87|error: expected ‘;’ at end of member declaration|/home/lxuser/Documents/neural/gross_Smart/sanndra/sanndra/slice_itr.h|87|error: expected unqualified-id before ‘<’ token|
Da müsste man jetzt etwas genauer wissen, wie der Code aussieht, damit man es so richtig stellen kann, wie es gemeint ist. Je nach Zusammenhang kann hier der Fehler verschiedene Ursachen haben. Am wahrscheinlichsten ist, dass vorher eine Forward-Deklaration des Operators
template <class T> bool operator ==(const slice_iter<T>&p, const slice_iter<T>&q);
fehlt. Sonst weiß der Compiler nicht, dass der Operator als Template definiert ist und wundert sich, was das <> da soll, wenn er es als normale Funktion zu parsen versucht.
Kann es denn sein, dass hier ein anderer Sprachstandard verwendet wurde?
Jain. Die Fehler sind schon korrekt so, streng nach Sprachstandard. Aber Compiler dürfen auch etwas laxer sein in der Umsetzung der Sprache. Das war besonders ganz früher der Fall, als der Sprachstandard noch jung war oder bei schwer zu implementierenden Feinheiten des Sprachstandards. Dadurch konnte auch an sich fehlerhafter Code problemlos übersetzt werden, ohne dass man die Fehler bemerkte. Aber besonders der GCC ist in den letzten Jahren extrem pedantisch geworden, was die Einhaltung des Sprachstandards angeht. Dann funktioniert der Code mit neuen Compilern eben nicht mehr.
Sollte ich vielleicht einen anderen Compiler nehmen?
Würde ich nicht, außer es bereitet extrem viel Mühe, den Code auf den neuesten Stand zu bringen. Falsch ist er sowieso, falls irgendwann der alte Compiler nicht mehr benutzt werden kann, hast du das gleiche Problem wieder. Außerdem haben jüngere GCCs wirklich viel gelernt, was Optimierung angeht, viele (nahezu alle) Features des C++11-Standard umgesetzt und die Fehlermeldungen sind sehr viel lesbarer geworden. Darauf würde ich(!) nicht verzichten wollen.
Oder doch nach einem Schalter fǘr laxere Fehlerbehandlung suchen
Ja, das könnte gehen. Aber meistens sollte er dir schon den passenden Schalter vorschlagen, wenn es einen gibt. Eventuell kannst du auch die Sprachstandardschalter mal ausprobieren. Die GCC-Standards sind oft laxer als die ANSI-Standards.