+ Antworten
Ergebnis 1 bis 3 von 3
Like Tree1x Danke

C++ - Klassen und reservierter Speicher

Eine Diskussion über C++ - Klassen und reservierter Speicher im Forum Hausaufgaben. Teil des Reallife-Bereichs; Moin zusammen, in der Schule sind wir an dem Punkt angelangt, wo es um OOP und um Klassen geht. Haben ...

  1. #1
    데르 외계
    Avatar von zokker13
    Registriert seit
    12.10.2008
    Ort
    Wuppertal
    Beiträge
    6.660
    Name
    Philipp
    Nick
    cWc.zokker13

    C++ - Klassen und reservierter Speicher

    Moin zusammen,

    in der Schule sind wir an dem Punkt angelangt, wo es um OOP und um Klassen geht.

    Haben uns also den elementaren Aufbau angesehen (private, public, Konstruktor, Dekonstruktor sowie Methoden).
    Das Prinzip einer Klasse ist mir bewusst (hoffe ich zumindest).

    Unsere Aufgabe ist also, eine Klasse zu schreiben, die im Konstruktor einen festen Übergabewert hat (Char- Array mir 40 + 1 Elementen).
    Als Erweiterungsaufgaben den ganzen Spaß ohne jegliche Begrenzung (also Speicherreservierung). Und hier bekomme ich Probleme..

    Die Klasse sieht dabei folgendermaßen aus:
    Spoiler:

    Code:
    #include <iostream>
    #include <String.h>
    
    using namespace std;
    
    
    class Klasse
    {
    private:
    	char *Text;
    
    
    public:
    	Klasse() 
    	{ 
    		cout << "Konstruktor sagt: \"hi\"" << endl;
    		char *cStandard = "WhatEvaa";
    
    		this->Text = new char[strlen(cStandard)];
    
    		strcpy(this->Text, cStandard);
    	}
    
    	Klasse(char *Text)
    	{
    		cout << "Konstruktor sagt: \"hi\"" << endl;
    
    		this->Text = new char[strlen(Text)];
    
    		strcpy(this->Text, Text);
    	}
    
    	~Klasse()
    	{
    		cout << "Konstruktor sagt: \"ciao\"" << endl;
    
    		delete[] this->Text;
    		
    	}
    	
    	void SetVal(char *value)
    	{
    		this->Text = new char[strlen(value)];
    
    		strcpy(Text, value);
    	}
    
    	char* GetVal()
    	{
    		return Text;
    	}
    
    };


    Das ganze wird über die main- Methode folgendermaßen aufgerufen:
    Spoiler:

    Code:
    #include <iostream>
    #include <String.h>
    //#include "Stack Klasse.cpp"
    #include "Heap Klasse.cpp"
    
    using namespace std;
    
    int main()
    {
    	Klasse *k = new Klasse();
    	k->SetVal("pewpew");
    	
    	cout << "Inhalt: " << k->GetVal() << endl;
    
    	delete k;
    
    
    	return 0;
    }


    Die Fehlermeldung nach dem Erstellen:



    Manchmal funktioniert es, macnhmal nicht.
    Normalerweise gibt es aber den Fehler..

    Benutzt wurde VS2012. Werde es demnächst auf einer Linuxdistribuztion testen.

    Hoffe jemand kann mir helfen. :>

  2. #2
    ( ☞ 。◕‿‿◕。) ☞
    Avatar von DrFriedChicken
    Registriert seit
    08.04.2007
    Ort
    Ba-Wü
    Beiträge
    12.424
    Name
    Jan
    Nick
    DrFriedChicken
    Clans
    SoDsW
    (strlen + 1) für den NULL-Character am Ende eines Strings.

    Persönliche Anmerkung: Mach mal den Parameter "Klasse(char *Text)" zu einem "Klasse(char *ParamText)" oder so. Dass es unten nicht so aussieht:

    Code:
    this->Text = new char[strlen(Text) + 1];
    
    		strcpy(this->Text, Text);
    Sondern so:

    Code:
    this->Text = new char[strlen(ParamText) + 1];
    
    		strcpy(this->Text, ParamText);
    Sowas ist sonst immer sehr hässlich zu lesen.

  3. #3
    데르 외계
    Avatar von zokker13
    Registriert seit
    12.10.2008
    Ort
    Wuppertal
    Beiträge
    6.660
    Name
    Philipp
    Nick
    cWc.zokker13
    Hallo,

    funktioniert prima so!
    Hatte tatsächlich den Null- Terminator vergessen. So ein Mist!


    Die Sache mit dem Übergabewert war sogar Absicht. Wollte nicht glauben was der Lehrer da gesagt hat.


    Danke für Deine Hilfe!

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •