Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- C++ 2 (http://www.informatikerboard.de/board/thread.php?threadid=2898)
Geschrieben von progger am 05.03.2016 um 18:34:
C++ 2
Hallo alle zusammen :
Wollte euch fragen ob ich jetzt beim Konstruktor den speicher (auf Array) richtig angelegt hab?
hfile
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
|
#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_ */
|
|
cpp
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
|
#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];
}
|
|
Geschrieben von eulerscheZahl am 06.03.2016 um 08:02:
Das Array passt. Aber das davor nicht.
| code: |
1:
2:
3:
|
if(m_curEntry < m_maxEntry){
m_curEntry = curEntry;
} |
|
Wozu soll das gut sein? Und was ist curEntry überhaupt? Ist nirgends definiert.
Ich würde es so machen:
| code: |
1:
2:
3:
|
if (maxEntry < 5) maxEntry = 5;
m_maxEntry = maxEntry;
m_curEntry = 0; |
|
Geschrieben von progger am 06.03.2016 um 11:14:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
|
#include "CTeamTable.h"
#include<iostream>
using namespace std;
unsigned int m_maxEntry =5;
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];
}
|
|
Wieso hast du hier das grösser zeichen umgedreht ?
In der Zusicherung steht das ja anders ?
| code: |
1:
2:
3:
4:
5:
6:
|
if(m_maxEntry <5){ wieso umgedreht hier ?
m_maxEntry = maxEntry;
}
|
|
Geschrieben von eulerscheZahl am 06.03.2016 um 11:17:
Der Wert soll ja größer oder gleich 5 sein.
Wenn er das nicht ist, muss man da was machen (den Wert auf 5 setzen).
Geschrieben von progger am 06.03.2016 um 11:32:
Dann müsste das hier auch so stimmen oder ?
Weil ich sehe gerade dass da steht die Zusicherung verletzt (also umgekehrt)
| code: |
1:
2:
3:
4:
5:
6:
7:
|
if(m_curEntry > m_maxEntry){
m_curEntry = 0;
m_curEntry = curEntry;
}
|
|
Geschrieben von progger am 06.03.2016 um 15:54:
Stimmt der Destruktor ?
leider Fehlermeldung
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
|
#include "CTeamTable.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;
}
|
|
Description Resource Path Location Type
'CTeam' does not name a type CTeamTable.h /CTeam line 15 C/C++ Problem
'CTeam' has not been declared CTeamTable.h /CTeam line 22 C/C++ Problem
'CTeam' was not declared in this scope CTeamTable.cpp /CTeam line 23 C/C++ Problem
'm_pTable' was not declared in this scope CTeamTable.cpp /CTeam line 23 C/C++ Problem
'm_pTable' was not declared in this scope CTeamTable.cpp /CTeam line 30 C/C++ Problem
expected ';' before 'CTeam' CTeamTable.cpp /CTeam line 24 C/C++ Problem
expected type-specifier before 'CTeam' CTeamTable.cpp /CTeam line 24 C/C++ Problem
Member 'm_pTable' was not initialized in this constructor CTeamTable.cpp /CTeam line 15 Code Analysis Problem
No return, in function returning non-void CTeam.cpp /CTeam line 39 Code Analysis Problem
Geschrieben von eulerscheZahl am 06.03.2016 um 17:11:
Hast du dir auch durchgelesen, was die Fehlermeldungen aussagen?
| Zitat: |
'CTeam' does not name a type CTeamTable.h /CTeam line 15 C/C++ Problem
'CTeam' has not been declared CTeamTable.h /CTeam line 22 C/C++ Problem
'CTeam' was not declared in this scope CTeamTable.cpp /CTeam line 23 C/C++ Problem |
In der Headerdaten ist CTeam offensichtlich nicht bekannt. Vielleicht solltest du es mal mit
#include "CTeam.h" versuchen.
Nebenbei bemerkt hast du im header auch public und private vertauscht.
| code: |
1:
2:
|
CTeam* m_pTable;
m_pTable = new CTeam[m_maxEntry]; |
|
Warum erstellst du da eine lokale Variable und nimmst nicht die Klassenvariable?
Geschrieben von progger am 06.03.2016 um 19:24:
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
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
|
/*
* CTeamTable.cpp
*
* Created on: 05.03.2016
* Author: VAIO
*/
#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: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
|
#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_ */
|
|
Woran erkenne ich denn die erste freie Position eines Array?
Geschrieben von progger am 08.03.2016 um 15:01:
Weiss jemand wie ich endlich die Fehler beheben kann ?
Stecke schon seit Tagen fest.
Scheint hier nicht so viel los zu sein
Geschrieben von eulerscheZahl am 08.03.2016 um 17:41:
Das Problem war, dass du einen Kosntruktor für CTeam ohne Argumente brauchst.
Ich habe das default Argument von der cpp in den Header verschoben.
Den übrigen Code habe ich nochmal reinkopiert, weil du den Konstruktor von CTeamTable falsch hattest.
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
|
#pragma once
#include <string>
#include <iostream>
using namespace std;
class CTeam{
private:
string m_teamName;
unsigned int m_winsTotal;
unsigned int m_equalTotal;
unsigned int m_lostTotal;
unsigned int m_goalsScoredTotal;
unsigned int m_goalsReceivedTotal;
public:
CTeam(string name = "noName");
string getName();
void addResult( unsigned int goalsScored, unsigned int goalsReceived);
unsigned int getTotalPoints() const;
friend ostream& operator << (ostream& out , CTeam const& rop);
bool operator < (const CTeam& rop) const;
}; |
|
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
|
#include <iostream>
#include <string>
#include "CTeam.h"
using namespace std;
CTeam::CTeam(string name) {
m_teamName = name;
m_goalsScoredTotal = 0;
m_goalsReceivedTotal = 0;
m_winsTotal = 0;
m_equalTotal = 0;
m_lostTotal = 0;
}
string CTeam::getName() {
return m_teamName;
}
void CTeam::addResult(unsigned int goalsScored, unsigned int goalsReceived){
if (goalsScored > goalsReceived) {
m_winsTotal++;
}
if (goalsReceived > goalsScored) {
m_lostTotal++;
}
if (goalsReceived == goalsScored) {
m_equalTotal++;
}
m_goalsScoredTotal += goalsScored;
m_goalsReceivedTotal+= goalsReceived;
};
unsigned int CTeam::getTotalPoints() const {
return m_winsTotal*3 + m_equalTotal*1;
};
ostream& operator << (ostream &out, const CTeam &rop) {
out<<"CTeam@" << rop.m_winsTotal<< "Spiele gewonnen " << " , " << rop.m_equalTotal << " Spiele unentschieden"<< endl;
out << "CTeam@"<< rop.m_goalsScoredTotal << " Tore erzielt " <<" , " << rop.m_goalsReceivedTotal << " " << " Tore kassiert "<< endl;
};
bool CTeam::operator < (const CTeam& rop) const {
//es wird true zurückgegeben, wenn der linke Operand mehr Punkte hat als der rechte Operand
if (this->getTotalPoints() > rop.getTotalPoints()) return true;
//bei gleich vielen Punkten entscheidet die Tordifferenz
if (this->getTotalPoints() == rop.getTotalPoints()) {
int team1Diff = this->m_goalsScoredTotal - this->m_goalsReceivedTotal;
int team2Diff = rop.m_goalsScoredTotal - rop.m_goalsReceivedTotal;
//Wenn der linke Operand die bessere (höhere) Tordifferenz hat als der rechte, wird ebenfalls true zurückgegeben
if (team1Diff > team2Diff) return true;
}
//in allen anderen Fällen wird false zurückgegeben
return false;
} |
|
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
|
#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: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
|
#include "CTeamTable.h"
#include "CTeam.h"
#include <iostream>
using namespace std;
CTeamTable::CTeamTable(int unsigned maxEntry = 10){
if (maxEntry < 5){
maxEntry = 5;
}
m_maxEntry = maxEntry;
m_curEntry = 0;
m_pTable = new CTeam[m_maxEntry];
}
CTeamTable::~CTeamTable(){
delete[] m_pTable;
} |
|
Geschrieben von progger am 08.03.2016 um 22:16:
Hast du Tipps für die c) für mich ?
Geschrieben von eulerscheZahl am 09.03.2016 um 06:31:
So würde ich das angehen:
| code: |
1:
2:
3:
|
if (m_curEntry >= m_maxEntry) return false;
m_pTable[m_curEntry++] = team;
return true; |
|
Geschrieben von progger am 09.03.2016 um 07:29:
Warum hast du auf der rechten Seite Team geschrieben ?
Und was bewirkt das m_curEntry++. Das Plus bedeutete ja Addition . Aber warum addieren ?
Geschrieben von eulerscheZahl am 09.03.2016 um 15:30:
Weil ich schreibfaul bin
| code: |
1:
|
m_pTable[m_curEntry++] = team; |
|
ist das selbe wie
| code: |
1:
2:
|
m_pTable[m_curEntry] = team;
m_curEntry = m_curEntry + 1 |
|
Geschrieben von progger am 09.03.2016 um 16:37:
Was ist aber das team hier ?
Ich vertstehe die denkweise nicht ?
Forensoftware: Burning Board, entwickelt von WoltLab GmbH