Was versteht man unter einer Redeklaration?



  • Was versteht man unter einer Redeklaration?

    ist damit das verdecken gemeint?:

    int i;
    
    {
    	int i;
    }
    


  • Redeklaration = Wieder-Deklaration

    kommt das bei dir in form einer fehlermeldung?



  • eigentlich redeklarieren.
    varieblen deklariert man mit extern.

    extern int i;
    extern int i;//erlaubt
    extern int i;//immernoch rlaubt
    extern int i;//er ist geduldig
    extern double i;//hier meckert er bestimmt und sagt das wort "redaklaration" dabei.
    

    oder gehts eher um funktionen?

    int f(int);//dekalriert.
    int f(double);//ne andere deklartiert
    int f(int);redekalriert, ok
    double f(int);redaklariert mit anderem return-typ, das darf man nicht.
    


  • Das passiert mit immer bei Typen:
    class das; //irgendwo
    struct das; //irgendwo anders plus redeklaration



  • eins fehlt noch:

    globale deklaration einer variablen in z.b. zwei verschiedenen header-dateien, die dann aber beide inkludiert werden.

    erste.h
    int i;

    zweite.h
    int i;

    haupt.cpp
    #include "erste.h"
    #include "zweite.h"



  • das wäre doppelte Definition



  • > kommt das bei dir in form einer fehlermeldung?

    das kommt bei mir in Form des C/C++ Kompendiums - der Autor schreibt öfter "Redeklaration"

    z. B.:
    "Namensbereiche sind keine statischen Gebilde, sie lassen sich nämlich beliebig erweitern. Wurde ein Namensbereich eingeführt, ist jede weitere Definition dieses Namensbereiches eine Erweiterung - und nicht etwa eine Redeklaration."

    oder ein paar seiten weiter vorne:
    "Interne Bindung:
    Alle vorkommen eines Bezeichners mit interner Bindung beziehen sich für die aktuelle Übersetzungseiheit auf das gleiche Objekt

    Die interne Bindung erlaubt die Redeklaration innerhalb einer Quelltextdatei"



  • endline schrieb:

    das wäre doppelte Definition

    stimmt, compiler sagt: error: redefinition of `int i'

    und bei:
    erste.h
    extern int h;

    zweite.h
    extern double h;

    kommt vom compiler: error: conflicting declaration 'int i'

    //edit ist ja eh egal, er der OP meinte ja was anderes



  • Aso! 💡 - redeklaration heißt einfach neu deklarieren - hat mich etwas verwirt im Zusammenhang mit dem Bindungskonzept von C++


Anmelden zum Antworten