Deklarationen für Variablen weiterleiten?

8

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?

    
Omair 15.09.2010, 05:03
quelle

3 Antworten

18

In C ++ muss einer Variablen -Deklaration das Präfix extern :

vorangestellt werden %Vor%

(Beachten Sie, dass Sie in C ++ das führende struct weglassen können.)

    
sbi 15.09.2010, 05:07
quelle
17

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

verwenden %Vor%

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.

    
AnT 15.09.2010 05:15
quelle
1

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.

    
Chubsdad 15.09.2010 05:08
quelle