vector in header und cpp



  • Hi,

    So müsste es funktionieren:

    Header: (DeineHeader.h)

    #include <vector>
    
    std::vector <int> a (5);
    

    .cpp

    #include "DeineHeader.h"
    
    int main ()
    {
        a [0] = 5; //Erstes Element des Vectors = 5 
    }
    

    MfG mikey.



  • Schau mal in das Kapitel 4.3 deines Buches! Da steht drin, wie man mit cpp's und Headern umgeht. Mußte schon lesen, damit du es verstehst.



  • Also wenn Du das Objekt der Klasse std::vector NUR in einer CPP-Datei verwenden willst, kannst Du das Objekt in der CPP-Datei definieren (lokal, also 'nicht außerhalb von geschweiften Klammern'). Willst Du die Variable in mehereren CPP-Dateien verwenden, kannst Du wie folgt vorgehen:

    GlobalDeclarations.hpp:

    extern int g_iGlobalCounter; // Deklaration
    

    GlobalDefinitions.cpp:

    int g_iGlobalCounter; // Definition
    

    Mal angenommen, die folgenden CPP-Dateien wollen diese Variable 'g_iGlobalCounter' verwenden:

    DemoUsage_01.cpp:

    #include "GlobalDeclarations.hpp"
    
    // ...Verwenden: ...
    g_iGlobalCounter = 4;
    // ...
    

    DemoUsage_02.cpp:

    #include "GlobalDeclarations.hpp"
    
    // ...Verwenden: ...
    if(g_iGlobalCounter == 5)
       g_iGlobalCounter = 1;
    // ...
    

    PS: Beachte, dass man globale (oder sogar externe) Varialben generell vermeiden soll, da dadurch ein Programm schnell unübersichtlich wird ➡ schlechter Programmierstil 😉 .

    EDIT: Oh Gott, ich glaub ich sollte schlafen gehen 😃 ... zuuuu spä.... 😞



  • EDIT: Oh Gott, ich glaub ich sollte schlafen gehen ... zuuuu spä....

    😃 👍 -> Rekordbeiträge in 10 Minuten !



  • Kapitel 4.3 habe ich gelesen.
    Ich habe verschiedene Versionen probiert, ohne Erfolg.

    //a.h
    #include <vector>
    std::vector<int> a;
    
    //a.cpp
    #include "a.h"
    #include <vector>
    a[0] = 5;
    

    // Vom Compiler
    Fehler: expected constructor, destructor, or type conversion before »=« token

    Es geht also nicht.
    Es ist auch sonst kein Code mehr drin in den beiden Dateien um andere Fehler auszuschließen.



  • Wie sonst kein Code mehr drin? 😕

    Dir ist schon klar, das du Anweisungen mind. in einer Funktion haben mußt???

    //a.cpp
    #include "a.h"
    #include <vector> // eigentlich nicht nötig, ist ja schon im Header inkludiert.
    
    void foo()
    {
        a[0] = 5;
    }
    


  • Ich habe es jetzt so gelöst.
    In der .cpp habe ich eine Funktion

    blah() {
        vektor.push_back(0,$WERT) ... usw.
    }
    

    Hier funktioniert es nicht mit einer <Standardinitialisierung> [INDEX] = $WERT
    Wenn ich die Funktion aufrufe und die Größe mit .size abfrage erhalte ich Null wenn ich die <Standardinitialisierung> benutze, ich nenne die einfach mal so. Mit push_back aber geht es. Das hätte ich mir denken können weil wie will man auf einen Index in einem leeren Vektor was reinschieben!

    Nur eine Frage hätte ich dann trotzdem noch.

    Da ich die Feldgröße nicht in der Headerdatei festlegen kann, wegen Fehlermeldung, wo kann ich die Feldgröße begrenzen ohne den Fehler der doppelten Deklaration zu bekommen.

    PS: Die verschiedenen Tutorials befassen sich sehr spät mit Vektoren, auch mein Buch hat es nur angerissen. Weil es wohl zur STL gehört.

    Wäre trotzdem dankbar für eine Antwort.



  • vektor.push_back(0,$WERT) ...
    

    ..was hat da das Dollarzeichen verloren ? Das kann doch so nicht funktionieren, oder ?

    MfG mikey.



  • Das sollte nur eine symbolische Darstellung sein.
    Hier steht ein Wert.



  • ...kommst wohl aus der PHP Welt, heh ? 😃



  • Etwas Shellskripting und Perl unter Linux.
    Es gibt Sachen die sind schwer raus zu kriegen.

    C++ mache ich erst seit ca. 3 Wochen, macht aber Spass, auch wenn es *anders* ist.
    🙂



  • Hans_er schrieb:

    Da ich die Feldgröße nicht in der Headerdatei festlegen kann, wegen Fehlermeldung, wo kann ich die Feldgröße begrenzen ohne den Fehler der doppelten Deklaration zu bekommen.

    Also einen Vector kannst du nicht begrenzen. Der kann dynamisch wachsen, ist theoretisch so groß wie dein RAM hergibt.

    Wenn du die maximale Größe beschränken willst, kannst Du ihn natürlich in eine Klasse kapseln (private member) und vor jedem hinzufügen die Größe prüfen und entscheiden ob ein push_back gemacht wird oder nicht.

    Hans_er schrieb:

    PS: Die verschiedenen Tutorials befassen sich sehr spät mit Vektoren, auch mein Buch hat es nur angerissen. Weil es wohl zur STL gehört.

    Wie heißt das Tutorial? (URL?)



  • http://www.cpp-tutor.de/cpp/intro/toc.htm

    http://www.willemer.de/informatik/cpp/

    http://tutorial.schornboeck.net/inhalt.htm

    Volkard - Alter Kurs

    In meinem Lehrbuch wird es auch nur ganz kurz angerissen. Der Rest steht im Kapitel STL.


Anmelden zum Antworten