In einer Methode einer Klasse die Methode einer anderen Klasse aufrufen ?



  • also wenn ich das buch richtig interpretiere, mache ich aus:

    Student *liste[10];

    ein

    vector<Student> liste[10];

    es wird gesagt, dies sei nicht so fehleranfällig, aber was genau ist der unterschied ?

    ich arbeite doch später auch noch mit liste[1] , obwohl ich vector nutze ?!?

    weiter hinten im Programm mache ich ja folgendes:

    liste[i] = NULL;

    dies ist nun fehlerhaft, da:

    Kein '=' Operator stimmt mit diesem Operanden überein.
    Operandentypen sind: std::vector<Student, std::allocator<Student>> = int

    liegt das daran, dass man bei vector kein = NULL mehr machen muss ?

    achso, ich habe oben noch was editiert, als ihr schon die antwort geschrieben habt...



  • Nein, das siehst du falsch.

    Du sollst aus:

    int studenten_zaehler;              // zählt die aktuell eingeschriebenen Studenten 
        Student *liste[10];                // 10 Studenten können in die THM
    

    einfach nur folgendes machen:

    std::vector<Student> studenten;
    

    Ganz einfach.

    Wenn du vector<Student> liste[10]; schreibst, dann hast du ja 10 Vectoren!



  • ok, danke, ich probiere es erstmal auf der alten art und weise zum laufen zu bekommen und dann arbeite ich mich durt unique_ptr und vector, denn so ganz ist das noch nicht in meinem verständnis....

    ich füge nun erstmal die deletes ein, allerdings besteht dann noch immer das problem,

    das Variante 1 (unschön) ausprobiert habe und es sind aus 85 Fehler nun nur noch 30 geworden.

    Trotzdem erhalte ich noch die Meldung:

    Fehler C2079 "Hochschule::fachbereich" verwendet undefiniertes class "Fachbereich"

    bezogen auf:

    class Hochschule
    {
    	int studenten_zaehler;              // zählt die aktuell eingeschriebenen Studenten
    	Student *liste[10];                // 10 Studenten können in die THM
    	Fachbereich fachbereich;            // einen Fachbereich in die Hochschule integrieren (ein Objekt der Klasse Fachbereich)
    


  • Smuji schrieb:

    ok, danke, ich probiere es erstmal auf der alten art und weise zum laufen zu bekommen und dann arbeite ich mich durt unique_ptr und vector, denn so ganz ist das noch nicht in meinem verständnis....

    Dann versteh das. Nicht auf die alte Weise lernen / machen. Du hast doch jetzt ein schönes Buch in dem das erklärt ist. Außerdem scheinst du "die alte Art und Weise" auch noch nicht verstanden zu haben.

    Ein Vektor kannst du dir grob als Array vorstellen, welches automatisch mit wächst wenn du Daten hinzufügst.

    Wenn du also ein

    std::vector<student> studenten;
    

    hast, dann kannst du mit

    student xyz;
    sutdenten.push_back(xyz);
    

    da ein Student hinzufügen.

    Delete brauchst du dann nicht mehr (einer der Vorteile). Wenn der Vektor irgendwann nicht mehr existiert, sorgt der dafür, dass der Speicher wieder richtig freigegeben wird.

    Deine Fehlermeldung hat den selben Grund wie die letzte. Fachbereich ist an der Stelle noch nicht bekannt. Lösbar zum Beispiel durch eine Forward Deklaration .



  • das problem ist, ist dass der dozent schon 60+ ist under überhaupt nicht mit uniqe_ptr und vector etc. arbeitet, sondern noch nach dem alten standard....

    wenn er irgendwelche aufgaben oder abfragen stellt, immier mit delete und arrays.....

    vllt. will er auch nur, dass wir noch den alten standard lernen.

    ähnlich wie man in der fahrschule auf einen schalter lernt, auch wenn man vor hat sich 'nen automatik zu kaufen.

    ich habe mein problem gelöst und das programm läuft.

    ich habe alle klassen und cpps in einzelne "dateien" aufgeteilt, alle header, using namespace etc. in einer einzigen Header.h zusammengefügt und diese überall bekannt gemacht.

    🙂



  • Smuji schrieb:

    das problem ist, ist dass der dozent schon 60+ ist under überhaupt nicht mit uniqe_ptr und vector etc. arbeitet, sondern noch nach dem alten standard....=)

    Es gab nie einen alten Standard ohne vector. Das Zeug wurde mit C++ geboren. Aber es gibt die alten Dozenten die einem C + Klassen als C++ verkaufen.


  • Mod

    Das war noch nie aktuell. Das Vermeiden von expliziten new/deletes und der daraus resultierenden Probleme war sogar die Hauptinitiative hinter der Erfindung von C++ und ist tief in der Sprache verwurzelt. Es ist das grundlegende Prinzip dahinter, wie man in C++ mit Ressourcen umgeht und seine Datenstrukturen plant. unique_ptr & Co. sind bloß Neuerungen, die ein bisschen angenehmer machen, was man früher nötigenfalls selber programmiert hätte. Aber der Punkt ist: Egal wie lange es her ist, man hat es stets so gemacht, wenn man C++ gemacht hat. Wenn nicht, dann hat man C mit cout gemacht.



  • Genau!

    Und ich verwende praktisch in allen meinen Programmen (die mehr tun als "Hallo Welt" auszugeben) std::vector. Wenn man C++ lernt, sind std::vector und std::string wohl die ersten Klassen, die man kennen sollte. Wenn euer Prof. die nicht nutzt, sollte der Kurs sich auch nicht "C++"-irgendwas nennen. Und wie out schon sagte, std::vector gab es selbstverständlich auch schon in C++98.

    Der unique_ptr wurde erst mit C++11 standardisiert. Inzwischen ist 2018. In den letzten 7 Jahren ist die Zeit gerade im Bereich der Programmierung ja auch stehen geblieben... ähm... naja. Ansonsten google mal den Begriff "RAII".

    Also lerne lieber nach dem Buch als nach eurem Kurs.



  • wob schrieb:

    Also lerne lieber nach dem Buch als nach eurem Kurs.

    Das Problem ist ja, dass der Dozent seinen eigenen Misst in der Klausur abfragt, also was bleibt dir übrig. 2x C++ parallel lernen macht man wohl nicht... man hat ja auch noch andere Klausuren. Also den Misst lernen und spätestens nach der Prüfung wieder alles vergessen, und dann wieder von vorne anfangen. 😃



  • Smuji schrieb:

    Trotzdem erhalte ich noch die Meldung:

    Fehler C2079 "Hochschule::fachbereich" verwendet undefiniertes class

    Sorry, aber muss man dir jeden einzelnen Bissen vorkauen? An dieser Stelle kannst du mal versuchen, dein gerade eben neu erworbenes Wissen praktisch anzuwenden.


Anmelden zum Antworten