multiple definition of `size'



  • hiho,

    ich soll, laut Praktikums-Übungsblatt, ein Array dynamisch erzeugen
    und für die Arraygröße eine globale Variable verwenden.

    ( Soll wohl dazu dienen, dass man versteht, dass bei dynamischer Speicherverwaltung der Speicherplatz zur Laufzeit angefordert wird, und die Arraygröße somit nicht Konstant sein muss. )

    Nun bekomm ich aber immer folgende Fehlermeldung:
    multiple definition of `size'

    Irgendwie schaff ich es nicht, den Fehler zu beheben.
    Außer ich mach die "size" Variable Konstant,
    was ich aber lauf Aufgabenstellung nicht soll.

    Einer von euch eine Idee?
    Und wieso kommt der Fehler bei konstanter "size" Variable nicht?

    ( Ich weiß die Übung ist strange, aber wolls mal so versuchen wie's aufm Blatt steht 😃 )

    Foo.h

    #ifndef FOO_H
    #define FOO_H
    
    #include <iostream>
    using namespace std;
    
    int size=50;
    
    class Foo
    {
        private:
            char* name;
    
        public:
            Foo();
            ...
    
    };
    
    #endif
    

    Foo.cpp

    #include "Foo.h"
    
    Foo::Foo() { name = new char[size]; }
    ...
    

    main.cpp

    #include "Foo.h"
    
    int main()
    {
        ...
        return 0;
    }
    

    MFG Dweb



  • Das kann doch auch nichts werden.Du deklarierst ne Variable "i" und willst in deiner .cpp eine Variable vom namen "size" als Variable an den new operator übergeben.Mich wundert es sowieso das er dir nicht meldet das diese Variable gar nicht existiert, zumindest ist aus dem Kontext nicht zu erkennen ob es diese Variable gibt.Nutze also anstatt "size" lieber "i" 😉 Weil die gibts auch wirklich.
    Achja ein using namespace std; in einem Header ist ganz gefährlich, benutzt dort lieder den Namensraumauflöser std:: wenn du etwas aus std gebrauchst.



  • ups ja habs geändert xD

    allerdings hab ich immernoch doppelte definition.

    wieso ist using namespace std in der header schlecht?



  • Haha...ich hab ja den besten Syntaxfehler überhaupt übersehen 😃

    Schau mal hier:

    Foo::Foo() { name = new [size]; }//sei doch so nett und sag dem compiler für welchen datentyp er speicher holen soll ;)
    //also so
    
    Foo::Foo() { name = new char[size]; }
    


  • hajajai

    das kommt davon wenn mans im Forum zusammenschreibt xD

    jez darfst du aber das using namespace std erklären^^
    und auch meine Fragen xD



  • Du legst mit std in Headern den ganzen Namensraum in allen Dateien offen, die diesen Header inkludieren. Das mag bei kleinen Programmen noch harmlos sein, aber besser, du gewöhnst es dir gleich ab, sonst hast du später Namenskonflikte. Ausserdem wollen vielleicht andere Programmierer, die deine Header einbinden, keine ausgeleerten Namensräume.


Anmelden zum Antworten