Speicher anlegen



  • https://www.pic-upload.de/view-33132294/k.png.html

    #ifndef CPLAYLIST_H_
    #define CPLAYLIST_H_
    #include <string>
    #include<iostream>
    using namespace std;
    #include "CTitle.h"
    
    class CPlaylist{
    
    private:
    	CTitle** m_titles;
    	int m_nextFree = 0;
    	int m_arraySize;
    
    public:
    	CPlaylist(int initialSize = 5);
    	~CPlaylist();
    	void add(CTitle* title);
    	void const print();
    	int const totalPlayTime();
    
    };
    
    #endif /* CPLAYLIST_H_ */
    
    #include <string>
    #include<iostream>
    using namespace std;
    #include  "CPlaylist.h"
    
    CPlaylist::CPlaylist(){
    
    	int initialSize = 5;
    
        m_nextFree = 0;
        m_arraySize = 0;
    
    }
    

    Bin jetzt bei Aufgabenteil 2 .
    Habe versucht den Konstruktor zu implementieren .
    Bin aber nicht sicher ob er richtig ist?

    Welche Zusicherung muss beim Konstruktor beachtet werden?

    Wie allokiert man genau Speicher?

    Es werden leider auch fehler bei eclipse angezeigt 😃

    Description Resource Path Location Type
    expected unqualified-id before ')' token CPlaylist.h /CTitle line 16 C/C++ Problem
    invalid use of incomplete type 'class CPlaylist' CPlaylist.cpp /CTitle line 15 C/C++ Problem
    Member declaration not found CPlaylist.cpp /CTitle line 15 Semantic Error
    forward declaration of 'class CPlaylist' CPlaylist.h /CTitle line 16 C/C++ Problem



  • Zeige die Fehlermeldungen des Compilers, nicht was Eclipse daraus zusammenmurkst (insbesondere wenn es eine Tabelle ist). Zeige den kompletten Code.
    Vermutlich bindet CTitle.h CPlaylist.h ein und umgekehrt.

    Die Anzahl der Parameter mus in der Deklaration identisch mit der in der Definition sein.



  • Ein Fehler habe ich schon weg :

    #include <string>
    #include<iostream>
    using namespace std;
    #include  "CPlaylist.h"
    
    CPlaylist::CPlaylist(int initialSize){
    
    	int initialSize = 5;
    
        m_nextFree = 0;
        m_arraySize = 0;
    
    }
    

    Description Resource Path Location Type
    declaration of 'int initialSize' shadows a parameter CPlaylist.cpp /CTitle line 17 C/C++ Problem
    Invalid redeclaration of 'initialSize' CPlaylist.cpp /CTitle line 17 Semantic Error
    Member 'm_titles' was not initialized in this constructor CPlaylist.cpp /CTitle line 15 Code Analysis Problem
    unused variable 'initialSize' [-Wunused-variable] CPlaylist.cpp /CTitle line 17 C/C++ Problem

    Welche Zusicherungen sind den gemeint ?
    Ich verstehe das nicht .

    Sonst könnte ich wenigstens schon die einfachere Sache selbst packen .

    Das mit dem Speicher allokieren sei mal dahingestellt 😃

    Ich habe nur ein Fach Informatik und da wird einfach zu viel vorausgesetzt obwohl ja viele erst noch ANfänger sind.



  • #include <string>
    #include<iostream>
    using namespace std;
    #include  "CPlaylist.h"
    #include "CTitle.h"
    
    CPlaylist::CPlaylist(int initialSize){
    
    	if(initialSize>= 5 )
    		m_arraySize = initialSize;
    	else
    		m_arraySize = 5;
    
    	m_titles= (CTitle**)malloc(m_arraySize * sizeof(CTitle*));
    	m_nextFree =0;
    
    }
    CPlaylist::~CPlaylist(){
    
    	free(m_titles);
    
    }
    
    void CPlaylist::add(CTitle* title){
    	*(m_titles+m_nextFree++) = title;
    
    }
    

    Passt das so?



  • malloc und free? Wie kommst du darauf?



  • eher new und delete


  • Mod

    stefang schrieb:

    eher new und delete

    Noch besser: Gar nichts davon. Ich habe jedenfalls im echten Leben noch nie eine Playlist gesehen, deren Aufgabe es umfasst, Speicher zu verwalten. Warum sollte es hier anders sein?



  • Also was soll ich genau nutzen ?

    Bin jetzt durch die unterschiedlichen Antworten verwirrt ?[c]



  • extreme12 schrieb:

    Also was soll ich genau nutzen ?

    Bin jetzt durch die unterschiedlichen Antworten verwirrt ?[c]

    Mmh, schwierig. Ich würde eher zu dem Moderator mit den 27K-Antworten tendieren, als zu dem Unreg.



  • Zuerst mal speicher anlegen .

    m_titles = new CTitle** [m_titles ];

    So lege ich doch speicher im Array an ?

    In der Aufgabe wird es do so verlangt leute ,irgendwie Speicher anzulegen.

    https://www.pic-upload.de/view-33132294/k.png.html


  • Mod

    Du benutzt vector, string & Co. als Datentypen und lässt die manuelle Speicherverwaltung gänzlich sein.

    Und lass auch das C vor den Klassen bleiben. Wozu soll das gut sein? WFindest Wdu Wdas Wleserlicher, Wwenn Wich Wjedes WWort Wals WWort Wmarkiere?



  • Wir haben nur eine Grundlagenveranstaltung und haben es nur mit new oder malloc gelernt ?

    WIe funktioniert es mit string und vector ?

    Ist es schwer ?


  • Mod

    extreme12 schrieb:

    Wir haben nur eine Grundlagenveranstaltung und haben es nur mit new oder malloc gelernt ?

    Tolle Grundlagenveranstaltung, die new und malloc lehrt, aber vector und string nicht erwähnt 🙄

    Ihr Armen. Ich fürchte, bei dem Lehrer werdet ihr nur Mist lernen, den ihr später wieder mühsam verlernen müsst

    WIe funktioniert es mit string und vector ?

    Ist es schwer ?

    Da du dich um überhaupt nichts mehr kümmern musst: Nein, es ist überhaupt nicht schwer und um ein vielfaches einfacher als das, was du gerade versuchst. Aber ich kann dir nicht mal eben so in einem Forenbeitrag richtiges C++ beibringen. Ich vermute mal stark, dass deine sogenannten "Grundlagen" völlig am Ziel vorbei geschossen sind, und ihr stattdessen C mit Klassen gelernt habt, so dass du mit einem kurzen Hinweis auf die Referenzen von string und vector vermutlich nicht auskommen wirst, weil dir die echten Grundlagen von C++ fehlen.



  • Speicher anlegen

    Glaub nicht, daß das was nützt. Du musst die Riegel schon einigermaßen kräftig in die Slots drücken. Bloß anlegen wird da zu wenig sein!



  • Swordfish schrieb:

    Glaub nicht, daß das was nützt. Du musst die Riegel schon einigermaßen kräftig in die Slots drücken. Bloß anlegen wird da zu wenig sein!

    Man hat nach jahrenlangen Versuchen herausgekommen, das wenn man an einen Speicherriegel weitere anlegt, das dann dadurch die Speicherfläche größer wird. Das wurde auch inzwischen wissenschaftlich bestätigt und zum Patent angemeldet. 😃 😃 😃


Anmelden zum Antworten