ich folgenden einfachen C++ Code habe:"Name des Konstruktor, nicht der Typ" in G ++ 4.4.7
#include <cstdio>
class A
{
public:
A(int y) : x(y) {}
A& operator=(const A& rhs);
int x;
};
A::A& A::operator=(const A& rhs) { this->x = rhs.x; return *this; }
int main(int, char**)
{
A a1(5);
A a2(4);
printf("a2.x == %d\n", a2.x);
a2 = a1;
printf("a2.x == %d\n", a2.x);
return 0;
}
Zeile 11, wo die Definition von A
‚s operator=()
Funktion an ist, ist falsch formatiert. ..oder zumindest glaube ich es. Wie erwartet, G ++ 4.7.4, sowie jede neuere Version von GCC, die ich versucht habe, führt den folgenden Fehler:
main.cpp:11:1: error: ‘A::A’ names the constructor, not the type
Merkwürdig ist, obwohl, G ++ 4.4.7 dieses Programm kompiliert ohne Warnungen erfolgreich, und druckt sogar 4 und 5, wie es zu erwarten wäre, wenn Zeile 11 korrekt geschrieben wäre (dh mit nur A&
anstelle von A::A&
).
Kann mir jemand helfen zu entziffern, was genau dort mit G ++ 4.4.7 vor sich geht? Ist das nur ein Fehler in dieser Version (wenn auch ein extrem alter, und schade uns, ihn immer noch zu benutzen)? Ich würde denken, der Standard würde explizit angeben, wie die operator=()
-Funktion deklariert und definiert werden muss.
Es ist keine Schande einen alten Compiler bei der Verwendung eines Legacy-Code-Basis zu unterstützen. Es ist verdammt schwer, Mittel zu bekommen, um die Werkzeugkette für ein funktionierendes Produkt zu verbessern. – user4581301