Ich habe C-Code, den ich nach C ++ portieren muss. Der Code hat eine Struktur
%Vor%Und jetzt werden zwei globale Arrays wie folgt deklariert und initialisiert:
%Vor%Nun, während dies in C funktioniert, gibt es einen Fehler in C ++ (Variable redeclared). Darf Variablen nicht in C ++ vorwärts deklariert werden?
struct A Unit[10]
ist keine Vorwärtsdeklaration einer Variablen. Der Begriff "Forward-Deklaration" bezieht sich normalerweise auf nicht-definierende Deklarationen, während struct A Unit[10]
eine Definition ist. In Ihrem Code definieren Sie Unit
mehrmals in derselben Quelldatei. In C-Sprache ist es erlaubt, da in C-Definitionen ohne Initialisierer vorläufige Definitionen sind. Sie können mehrmals in der gleichen Übersetzungseinheit auftreten. In C ++ gibt es keine vorläufige Definition. In C ++ sind mehrere Definitionen immer unzulässig.
Wenn Sie eine echte Vorwärtsdeklaration für eine Variable wünschen, müssen Sie das Schlüsselwort extern
Dies funktioniert in C und C ++. Als Nebeneffekt ergibt dies jedoch Unit
externe Verknüpfung. Wenn Sie eine Variable mit interner Verknüpfung benötigen, dann haben Sie in C ++ Pech, denn in C ++ ist es nicht möglich, eine Variable mit interner Verknüpfung weiterzuleiten. In der Zwischenzeit werden Ihnen die vorläufigen Definitionen helfen, dies zu erreichen.
C lässt zu, dass Variablen (vermutlich) mit einer Aussage versehen werden. C ++ nicht. Sobald 'Einheit' definiert wurde, kann sie nicht im selben Bereich neu definiert werden.
Tags und Links c arrays c++ struct forward-declaration