Speicher anlegen
-
Hallo alle zusammen :
Wollte euch fragen ob ich jetzt beim Konstruktor den speicher (auf Array) richtig angelegt hab?
#ifndef CTEAMTABLE_H_ #define CTEAMTABLE_H_ #include<iostream> using namespace std; class CTeamTable { public: CTeam* m_pTable; unsigned int m_maxEntry; unsigned int m_curEntry; private: CTeamTable(int unsigned maxEntry); ~CTeamTable(); bool addTeam(CTeam const& team)const; void print(string headline); bool addResult(string team1,string team2,unsigned int goalsTeam1, unsigned int goalsTeam2); void sort(); }; #endif /* CTEAMTABLE_H_ */ [code] cpp#include "CTeamTable.h" #include<iostream> using namespace std; unsigned int m_maxEntry; unsigned int m_curEntry = 0; CTeamTable::CTeamTable(int unsigned maxEntry = 10){ if(m_maxEntry >=5){ m_maxEntry = maxEntry; } if(m_curEntry < m_maxEntry){ m_curEntry = curEntry; } CTeam* m_pTable; m_pTable = new CTeam[m_maxEntry]; }
-
Warum kein vector? Du machst prompt so ziemlich alles falsch, was normalerweise so falsch gemacht wird, wenn Leute meinen, selber Speicher verwalten zu müssen.
edit: Ich korrigiere: Du machst sogar noch viel mehr falsch. Vector alleine würde hier nicht helfen.
-
Mit vector kenne ich mich gar nicht aus .
Wir machen nur eine kleine EInführung in die Programmierung.
-
Wo liegen meine Fehler?
-
Ahh, so ein Kurs. Spekulation: Der Lehrer weiß selber nicht, wie es richtig geht. Die Aufgabenstellung ist jedenfalls Schrott.
Zur direkten Frage: So geht das nicht. Offensichtlich hat euer Lehrer vergessen, euch ein paar wichtige Grundlagen beizubringen. Ohne die, kommst du hier nicht weiter. Das Problem ist lösbar, indem du dich mit einem der folgenden Stichworte beschäftigst:
-"Vector". Damit würde ein normaler C++-Programmierer das lösen. Die Lösung damit wäre trivial.
-"Smartpointer". Eine allgemeinere Lösung als der Vector. Würde man hier nicht nehmen, weil der Vector so gut passt, aber passt dafür auch auf andere Probleme.
-"Regel der großen Drei/Fünf" und "RAII". Vermutlich das, was hier gelernt werden soll (aber nicht gelehrt wurde). Ist das, was Smartpointer und Vectoren intern machen. Sehr wichtiges Konzept in C++, das man unbedingt kennen muss.Das Problem ist aber, dass du auch Probleme mit anderen Grundlagen der Sprache zu haben scheinst, die zuerst behoben werden müssen. Beispielsweise arbeitest du in deinem Konstruktor mit einer lokalen Variable, die den Klassenmember verdeckt. Dazu kommen zahlreiche stilistische Fehler, die dir später Probleme machen werden: Globale Variablen. using namespace in Headern.
Das Design der Klasse und ihrer Methoden und die Bezeichner sind auch Müll, aber das ist nun einmal der Qualität der Aufgabenstellung geschuldet.
-
Kannst du vielleicht ein wenig erklären wie das mit vector geht ?
Wenn ich es verstehe könnte ich es bei der Prüfung anwenden und glänzen

-
#include <vector> #include<iostream> class CTeamTable { std::vector<CTeam> m_table; public: void addTeam(CTeam const& team) { m_table.push_back(team); } void print(string headline); bool addResult(string team1,string team2,unsigned int goalsTeam1, unsigned int goalsTeam2); void sort(); };
-
Weiss jemand wie man den index der nächsten freien position auf array setzen kann?
Wie ist die denkweise dabei.
Ich will es mit zeigern probieren
-
xxxpert schrieb:
#include "CTeamTable.h" #include<iostream> using namespace std; unsigned int m_maxEntry; unsigned int m_curEntry = 0; CTeamTable::CTeamTable(int unsigned maxEntry = 10){ if(m_maxEntry >=5){ m_maxEntry = maxEntry; } if(m_curEntry < m_maxEntry){ m_curEntry = curEntry; } CTeam* m_pTable; m_pTable = new CTeam[m_maxEntry]; }Du legst eine lokale Variable mit dem Namen m_pTable an und weist ihm den Speicher zu. Dann verlässt das Programm den Scope und der Zeiger ist verloren. Die Membervariable mit dem Namen m_pTable wird nicht initialisiert.
Nicht der einzige Fehler, aber der, der am besten zur Frage passt.
Dass Du m_maxEntry und m_curEntry verwendest, ohne sie zu initialisieren, wird Dein Compilier mit geeigneter Warnstufe erkennen.
-
Warum wird mir immer noch hier Fehler angezeigt ?
m_pTable = new CTeam[m_maxEntry];
Verstehe ich nicht . Im header habe ich es ja so includiert wie im UML Diagramm#include "CTeamTable.h" #include "CTeam.h" #include<iostream> using namespace std; unsigned int m_maxEntry =5; unsigned int m_curEntry = 0; CTeamTable::CTeamTable(int unsigned maxEntry = 10){ if (maxEntry < 5){ maxEntry = 5; m_maxEntry = maxEntry; m_curEntry = 0; } CTeam* m_pTable; m_pTable = new CTeam[m_maxEntry]; } CTeamTable::~CTeamTable(){ delete[] m_pTable; }[code] Header#ifndef CTEAMTABLE_H_
#define CTEAMTABLE_H_
#include<iostream>
#include "CTeam.h"
using namespace std;class CTeamTable {
private:
CTeam* m_pTable;
unsigned int m_maxEntry;
unsigned int m_curEntry;public:
CTeamTable(int unsigned maxEntry);
~CTeamTable();
bool addTeam(CTeam const& team)const;
void print(string headline);
bool addResult(string team1,string team2,unsigned int goalsTeam1, unsigned int goalsTeam2);
void sort();};
#endif /* CTEAMTABLE_H_ */
[code]
Woran erkenne ich denn die erste freie Position eines Array?
-
Das ist immer noch der gleiche Code, wie im ersten Beitrag, mit sämtlichen Fehlern, die schon genannt wurden. Wenn du nur jemanden suchst, der dir deine Hausaufgaben macht und du sonst gar nichts lesen willst, dann sag das gleich. Vielleicht findet sich sogar jemand. Alle anderen können dann aufhören, ihre Zeit mit dir zu verschwenden.
-
Eigentlich ist dieser Code anders gewesen .
Es handelt sich um keine Hausaufgabe.
Ich wollte mit dieser Übung nur lernen .
Ich dachte im Forum wird erklärt was man nicht versteht.
Wenn man alles selber weiss,brauch man doch gar nicht zu fragen

-
Man lernt nicht durch rum probieren. Nimm ein gutes C++ Buch und arbeite es systematisch durch. Dann wirst Du die Konzepte verstehen. Wenn Du eine konkrete Frage hast, dann helfen wir Dir sehr gerne. Aber wir werden Dir nicht C++ bei bringen. Dafür gibt es eben diese Bücher.
-
Achso ok . Das wusste ich nicht .
Dann hättet ihr auch schreiben sollen . ( Forum nur für Experten )
Dann macht es eigentlich auch kein Sinn Fragen rein zu stellen .
-
No, jetzt ist er aber sauer. Vielleicht sollte er das nächste mal eine richtige Frage stellen
.