Ich habe einige C-Code, den ich nach C++ portieren muss. Der Code hat eine StrukturForward Deklarationen für Variablen?
struct A {
...
struct A * myPtr;
}
Und nun zwei globale Arrays deklariert sind und wie diese initialisiert:
//Forward declaration of Unit
struct A Unit[10];
struct A* ptrUnit[2] = { Unit, Unit+7 };
struct A Unit[10] = { { .., &ptrUnit[0] },
... };
Jetzt, während dies in C funktioniert gut, es gibt einen Fehler in C++ (Variable neu deklariert). Sind Variablen nicht in C++ vorwärts deklariert?
Siehe [diese Antwort] (http://stackoverflow.com/questions/1410563/what-is-the-difference-between-a-definition-and-a-declaration/1410632#1410632) für weitere Details zu Deklarationen und Definitionen. – sbi
Ihre Aussage über 'den gleichen Namensraum' ist nicht vollständig korrekt. Eine 'struct A' Definition hat eine implizite' typedef struct A A' als Konsequenz, wenn der Bezeichner 'A' nicht im selben Bereich definiert ist. Etwas wie "struct A {...} A;" ist in C++ völlig legal, und dann bezieht sich "A" (ohne "struct") auf das Objekt. Dass dies möglich ist, bedeutet jedoch nicht, dass dies ein guter Stil ist. In POSIX haben Sie das beispielsweise mit der Header-Datei "sys/stat.h", die "struct stat" und die Funktion "stat" definiert. –
@Jens: Ich bin mir nicht sicher über die rechtlichen Details, aber Sie scheinen einen Punkt zu haben. Ich habe meine Antwort entsprechend bearbeitet. – sbi