Implementierungsproblem - Seite 2

Neue Frage »

Auf diesen Beitrag antworten »
Kevin33

Zitat:
Original von as_string
na dreimal winsTotal plus 1mal equalTotal natürlich! Das weiß doch wirklich jedes Kind, wie kann es sein, dass Dir das nicht klar ist? Das ist doch quasi genau so in der Aufgabe geschrieben, da muss man doch noch nicht mal groß überlegen!
tmp Variable... woher hast Du den Quatsch überhaupt???

Wo ist meine Tabelle? Ach was, tue Dir und der restlichen Welt einen Gefallen und lass es am besten einfach sein!


großes Grinsen großes Grinsen großes Grinsen Wenigstens paar lustige Worte dabei.
Für mich sind diese einfachen Dinge auch noch sehr schwer.

Ich poste nochmals den kompletten code.
Bitte sagen welche Fehler du genau bei der addResult Methode meintest,weil es gab zu viele Missverständnisse.
Wusste gar net was du meinst großes Grinsen

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:
59:
60:
61:
62:
/*
 * CTeam.cpp
 *
 *  Created on: 21.10.2017
 *      Author: Medion
 */
#include<iostream>
using namespace std;
#include<string>
#include"CTeam.h"

CTeam::CTeam(string name ){

    m_teamName = name;
}

std::string CTeam::getName(){
    return m_teamName;

    }

void CTeam::addResult(unsigned int goalsScored,unsigned int goalsReceived){


    if(goalsScored>goalsReceived ){

        m_winsTotal += 1;
        m_goalsScoredTotal += goalsScored;





    }
    if(goalsScored<goalsReceived   ){

            m_lostTotal += 1;
            m_goalsReceivedTotal += goalsReceived;




        }
    if( goalsScored== goalsReceived){

                m_equalTotal += 1;

            }

}

unsigned int const CTeam::getTotalPoints(){

	return 3*m_winsTotal;
	return 1*m_equalTotal;
    return 0*m_lostTotal;


}

 
Auf diesen Beitrag antworten »
as_string

erstmal bei der getTotalPoints():
Dir ist schon klar, dass er beim ersten return raus springt und dann in der Methode sonst gar nichts mehr macht.
Du musst einen Wert berechnen und den zurück geben und nicht dreimal return. Das sind wirklich die grundlegendsten Grundlagen...
Was musst Du also tun, wenn Du 3 Punkte für jedes gewonnene und einen für jedes unentschieden-gespielte Spiel bekommst? Was machst Du mit den Punkten?

Zu der addResults()-Methode: Mache mir die Tabelle, dann siehst Du was falsch ist!
Auf diesen Beitrag antworten »
Kevin33

Keine Ahnung ob es sowas gibt großes Grinsen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:

unsigned int const CTeam::getTotalPoints(){

	return 3*m_winsTotal, 1*m_equalTotal,0*m_lostTotal;


}
Auf diesen Beitrag antworten »
as_string

OK, extra Service, ich mache die Tabelle vor:
code:
1:
2:
3:
4:
5:
6:
7:
8:
             m_winsTotal    m_lostTotal    m_equalTotal    m_goalsScoredTotal    m_goalsReceivedTotal
initial                0              0               0                     0                       0
3:2                    1              0               0                     3                       2
2:2                    ?              ?               ?                     ?                       ?
1:2                    ?              ?               ?                     ?                       ?
0:0                    ?              ?               ?                     ?                       ?

Gehe einfach auf "zitieren" und ersetze die Fragezeichen durch die richtigen Werte. Ich habe ja sogar schon das erste Spiel eingetragen, also das ist doch wirklich extrem nett von mir, oder?
 
Auf diesen Beitrag antworten »
as_string

Zitat:
Original von Kevin33
Keine Ahnung ob es sowas gibt großes Grinsen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:

unsigned int const CTeam::getTotalPoints(){

	return 3*m_winsTotal, 1*m_equalTotal,0*m_lostTotal;


}


Meine Güte, Du musst natürlich die Punkte summieren! drei mal die wins PLUS eins mal die equals und die lost kannst Du weg lassen, die gehen in die Summe ja nicht ein, weil Du die mit 0 multiplizierst...
Also so was hab ich wirklich noch nicht erlebt.
Auf diesen Beitrag antworten »
Kevin33

großes Grinsen ok gehe pennen .
Bin mit den Nerven am Ende großes Grinsen
Morgen geht es weiter mit Operator Ausgabe großes Grinsen
Auf diesen Beitrag antworten »
as_string

Zitat:
Original von Kevin33
großes Grinsen ok gehe pennen .
Bin mit den Nerven am Ende großes Grinsen
Morgen geht es weiter mit Operator Ausgabe großes Grinsen

Mach doch endlich mal meine Tabelle! Das mit dem Aufsummieren stimmt doch immer noch nicht!
Auf diesen Beitrag antworten »
Kevin33

Bin gegen Abend wieder da. Mache dann deine Tabelle großes Grinsen
Poste sie dann.
Wie soll ich die genau haben ?

Aber ich glaube ,dass ich vielleicht verstehe was du meinst .
Mann muss ja auch z.B bei einem Sieg auch die kassierten Tore mitzählen oder ?

Nur als Bsp:

Meinst du die Logik so?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:

    if(goalsScored>goalsReceived ){

        m_winsTotal += 1;
        m_goalsScoredTotal += goalsScored;
        m_goalsReceivedTotal += goalsReceived; das auch noch hochzählen?
        





    }

Auf diesen Beitrag antworten »
as_string

Du musst immer die jeweiligen Tore mitzählen, völlig unabhängig davon ob gewonnen oder verloren. Mach das einfach raus aus dem ganzen if-Zeugs!
Auf diesen Beitrag antworten »
Kevin33

Was meinst du jetzt genau String ?
Auf diesen Beitrag antworten »
as_string

Zitat:
Original von Kevin33
Was meinst du jetzt genau String ?

Was meine ich wie genau? Noch genauer wäre es nur, wenn ich gleich den Quelltext hinschreiben würde. Willst Du darauf hinaus, dann sag’s gleich!
Ich glaube Du willst uns alle nur verarschen!
Auf diesen Beitrag antworten »
Kevin33

Nein großes Grinsen . Ich poste später meinen Ansatz
Auf diesen Beitrag antworten »
Kevin33

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:
59:
60:

#include<iostream>
using namespace std;
#include<string>
#include"CTeam.h"

CTeam::CTeam(string name ){

    m_teamName = name;
}

std::string CTeam::getName(){
    return m_teamName;

    }

void CTeam::addResult(unsigned int goalsScored,unsigned int goalsReceived){


    if(goalsScored>goalsReceived ){

        m_winsTotal += 1;
        m_goalsScoredTotal += goalsScored;
        m_goalsReceivedTotal += goalsReceived;






    }
    if(goalsScored<goalsReceived   ){

            m_lostTotal += 1;
            m_goalsReceivedTotal += goalsReceived;
            m_goalsScoredTotal += goalsScored;




        }
    if( goalsScored== goalsReceived){

                m_equalTotal += 1;
                m_goalsScoredTotal += goalsScored;
                m_goalsReceivedTotal += goalsReceived;
            }

}

unsigned int const CTeam::getTotalPoints(){

	return 3*m_winsTotal+1*m_equalTotal;


}




Mach mich jetzt an die Operator Ausgabe .
Wenigstens paar Tipps dafür ?

Bevor ich wieder dumme Ansätze bringe ? großes Grinsen
Auf diesen Beitrag antworten »
Kevin33

habe die Operator Ausgabe implementiert ?
Die kommt im Header oder ?
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:
* CTeam.h
 *
 *  Created on: 21.10.2017
 *      Author: Medion
 */

#ifndef CTEAM_H_
#define CTEAM_H_
#include<iostream>
using namespace std;
#include<string>

class CTeam{
private:
	string m_teamName;
	unsigned int m_winsTotal=0;
	unsigned int m_lostTotal =0;
	unsigned int m_equalTotal= 0;
	unsigned int m_goalsScoredTotal = 0;
	unsigned int m_goalsReceivedTotal=0;

public:
	CTeam(string name = "NoName");
	string getName();
	void addResult(unsigned int goalsScored,unsigned int goalsReceived);
	unsigned int const getTotalPoints();
	friend ostream& operator <<(ostream& out,CTeam const& rop){

		out << "Bayern Muenchen" << " " << ":" << rop.addResult << rop.1*m_equalTotal << " " << "Tore"<<rop.goalsScored<<":"<<rop.goalsReceived << endl;
		return out;
	}
	bool operator< (const CTeam& rop);

};




#endif /* CTEAM_H_ */
Auf diesen Beitrag antworten »
as_string

Um das vielleicht doch noch irgendwie hin zu bekommen: Schau mal, die zwei Zeilen
code:
1:
2:
        m_goalsScoredTotal += goalsScored;
        m_goalsReceivedTotal += goalsReceived;
hast Du doch jetzt in jedem if-Block drin. Das bedeutet doch, dass diese beiden immer ausgeführt werden sollen, richtig? Warum schreibst Du sie dann aber überhaupt in einen bedingten Block rein und dafür dreimal dasselbe und nicht einfach vor oder nach den ganzen if Blöcken???
Abgesehen davon sollte man wirklich if(){} else if() {} else {} verwenden. Die drei Bedingungen schließen sich ja gegenseitig aus und decken umgekehrt gemeinsam aber alle Möglichkeiten ab.

Gute Tipps haben Dich bisher doch auch nicht von dummen Ansätzen abgehalten. Was sollte das also bringen?
Auf diesen Beitrag antworten »
Kevin33

Zitat:
Original von Kevin33
habe die Operator Ausgabe implementiert ?
Die kommt im Header oder ?
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:
* CTeam.h
 *
 *  Created on: 21.10.2017
 *      Author: Medion
 */

#ifndef CTEAM_H_
#define CTEAM_H_
#include<iostream>
using namespace std;
#include<string>

class CTeam{
private:
	string m_teamName;
	unsigned int m_winsTotal=0;
	unsigned int m_lostTotal =0;
	unsigned int m_equalTotal= 0;
	unsigned int m_goalsScoredTotal = 0;
	unsigned int m_goalsReceivedTotal=0;

public:
	CTeam(string name = "NoName");
	string getName();
	void addResult(unsigned int goalsScored,unsigned int goalsReceived);
	unsigned int const getTotalPoints();
	friend ostream& operator <<(ostream& out,CTeam const& rop){

		out << "Bayern Muenchen" << " " << ":" << rop.addResult << rop.1*m_equalTotal << " " << "Tore"<<rop.goalsScored<<":"<<rop.goalsReceived << endl;
		return out;
	}
	bool operator< (const CTeam& rop);

};




#endif /* CTEAM_H_ */


Stimmt auch wieder großes Grinsen
Du hast meinen Ansatz übersehen? großes Grinsen
Auf diesen Beitrag antworten »
as_string

Kurz zwei Punkte:
Seit wann implementieren wir direkt in der Header-Datei?
Was ist, wenn das Team nicht Bayern München sondern Eintracht Frankfurt ist? Meinst Du, die würden sich über die Ausgabe freuen? Ich finde halt, so was muss einem schon auffallen, wenn man so was hin schreibt. Deshalb glaube ich Dir auch nicht mehr was Du erzählst. Du willst uns nur verarschen...

Generell: ließ doch irgendwie erst ein Buch oder auch online über Operatorüberladung
Auf diesen Beitrag antworten »
Kevin33

code:
1:
2:
3:
4:
5:
6:
7:
8:

friend ostream& operator <<(ostream& out,CTeam const& rop){

		out << m_teamName << " " << ":" << rop.addResult << rop.1*m_equalTotal << " " << "Tore"<<rop.goalsScored<<":"<<rop.goalsReceived << endl;
		return out;
	}


Soll ich nicht besser m_goalsScoredTotal nehmen ?

Bei goalsScored zeigt er ja Fehler an?
Auf diesen Beitrag antworten »
Kevin33

Ich denke ,dass ich die member Variablen nutzen muss oder ?

Die anderen variablen erkennt er ja nicht ?

code:
1:
2:
3:
4:
5:
6:
7:
8:

ostream& operator <<(ostream& out,CTeam const& rop){

		out << rop.m_teamName << " " << ":" << rop.addResult << rop.1*m_equalTotal << " " << "Tore"<<rop.m_goalsScoredTotal<<":"<<rop.m_goalsReceivedTotal ;
		return out;
	}
Auf diesen Beitrag antworten »
as_string

Es zeigt sich halt mal wieder, dass Du komplett planlos bist in jeder Hinsicht. Das wird auch nicht besser werden...

Ich bin raus, such Dir nen anderen Trottel!
Auf diesen Beitrag antworten »
Kevin33

Über meine Dummheit können wir uns ja später streiten großes Grinsen

Etwas besser ?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
ostream& operator<<(ostream& out,CTeam const& rop){

	out << rop.m_teamName << ":" << "" << rop.m_goalsScoredTotal << rop.m_goalsReceivedTotal<< rop.m_equalTotal<< 3*rop.m_goalsScoredTotal+0*rop.m_goalsReceivedTotal+1*rop.m_equalTotal<<"Tore"<<rop.m_goalsScoredTotal<<":"<<rop.m_goalsReceivedTotal<<endl;
		
		return out;
	}



Auf diesen Beitrag antworten »
Kevin33

Habe es hinbekommen.

Hier nochmal für die Nachwelt ,falls jemand sich irgendwann mal mit der Aufgabe beschäftigt.
Muss sich dann nicht dumm und dämlich fragen großes Grinsen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
ostream& operator<<(ostream& out,CTeam const& rop){

		out << rop.m_teamName << ":" << "" << rop.m_winsTotal << rop.m_equalTotal<< rop.m_lostTotal<<" (" << 3*rop.m_winsTotal+1*rop.m_equalTotal<< "Punkte )" << " " <<"Tore"<<rop.m_goalsScoredTotal<<":"<<rop.m_goalsReceivedTotal<<endl;

		return out;
	}



Habe getestet,die Ausgabe kommt richtig aus.
Auf diesen Beitrag antworten »
as_string

Für die Nachwelt noch ein paar Anmerkungen:
  • Es macht offensichtlich überhaupt keinen Sinn, einen Leerstring (also "") mit in den Stream zu schreiben.
  • Wenn man mehrere String-Literale hintereinander ausgeben will, sollte man die zu einem String zusammenfassen, also: "abc" << "def" schreibt man dann besser als "abcdef".
  • die Rechnung 3*m_winsTotal + m_equalTotal ist gerade das, was die Methode getTotalPoints() ausrechnet. Dann sollte man auch diese Methode verwenden und nicht dieselbe Berechnung nochmal machen. Wenn sich irgendwann die Berechnungsart in Zukunft ändern sollte, muss man das dann nur an einer Stelle anpassen.

Mehr hab ich mir nicht angeschaut. Aber das sollte man schon beachten.

Gruß
Marco
Auf diesen Beitrag antworten »
Kevin33

Aber mir wurde das von jemanden erklärt das man keine Funktionen beim operator aufrufen kann.

Es wurden ja auch fehler in meinem Ansatz angezeigt .

Aber du meintest ja gleich : Ich will euch verarschen großes Grinsen
Auf diesen Beitrag antworten »
Kevin33

Zum Vergleich der Tabellenplätze implementieren Sie den überladenen Operator <, der true zurückgibt, wenn das Team des linken Operanden besser ist als das Team des rechten, also einen kleineren Tabellenplatz erhält. Er ist wie folgt spezifiziert: &#61623; Es wird true zurückgegeben, wenn der linke Operand mehr Punkte hat als der rechte Operand. &#61623; Bei gleich vielen Punkten entscheidet die Tordifferenz (Gesamtzahl eigener Tore – Gesamtzahl Gegentore). Wenn der linke Operand eine bessere (höhere) Tordifferenz hat als der rechte, wird ebenfalls true zurückgegeben. &#61623; In allen anderen Fällen wird false zurückgegeben

Ich bekomme hier die Fehlermeldungen net weg string:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
bool CTeam::operator< (const CTeam& rop){
if(this->getTotalPoints()>rop->getTotalPoints()){

return true;
}
if(this->getTotalPoints()== rop.getTotalPoints()){

int Team1Points = this->m_goalsScoredTotal - this->m_goalsReceivedTotal;
int Team2Points = rop.m_goalsScoredTotal - rop.m_goalsReceivedTotal;

if(Team1Points>Team2Points){
return true;
}
else{

return false;
}

}



Bekomme folgende Fehlerescription Resource Path Location Type
base operand of '->' has non-pointer type 'const CTeam' CTeam.cpp /CTeam line 70 C/C++ Problem
Description Resource Path Location Type
passing 'const CTeam' as 'this' argument discards qualifiers [-fpermissive] CTeam.cpp /CTeam line 74 C/C++ Problem
Auf diesen Beitrag antworten »
as_string

Zitat:
Original von Kevin33
Aber mir wurde das von jemanden erklärt das man keine Funktionen beim operator aufrufen kann.

Das ist auch wieder Blödsinn. Da hast Du sicher wieder etwas falsch verstanden.
code:
1:
2:
3:
4:
5:
ostream& operator<<(ostream& out, const CTeam& rop) {
	out << rop.getName() << " : " << rop.m_winsTotal << " " << rop.m_equalTotal << " " << rop.m_lostTotal
	    << " ( " << rop.getTotalPoints() << " Punkte ) Tore " << rop.m_goalsScoredTotal << ":" << rop.m_goalsReceivedTotal;
	return out;
}


Gruß
Marco
Auf diesen Beitrag antworten »
Kevin33

Aha ok . Dann rufe ich das nächste mal die Funktion auf ,hatte ich übrigens in meinen ersten Ansätzen auch.
Wie sieht es genau mit der anderen Methode aus?
Bekomme die Compiler Fehler net weg
Auf diesen Beitrag antworten »
as_string

Lass das "this->" einfach komplett weg. Richtig wäre sonst auch "this.", aber das ist unnötig.
Auch "rop->" ist falsch, da dann "rop.", was man allerdings nicht weg lassen kann.

Aber: Du kopierst das doch alles irgendwo her. Da kommt doch nichts von Dir selber. Erklär doch mal in eigenen Worten, was da überhaupt passieren soll. Außerdem hast Du bei uns ja die Aufgabe auch noch nicht gepostet, so weit ich das sehen kann zumindest.
Auf diesen Beitrag antworten »
Kevn33

Das ist eigentlich von mir. Mit this greift man auf das aktuelle Objekt und mit rop. auf das andere .

Soll ich top und this komplett weglassen oder wie?
Auf diesen Beitrag antworten »
as_string

Solche Dinge stehen in genug Büchern oder auch im Netz. Lies doch einfach mal irgendwo, wie man einen Vergleichsoperator für eine C++ Klasse überlädt, was es überhaupt soll und wie man was macht. Das macht doch echt überhaupt keinen Sinn, wenn ich denselben Kram hier gerade nochmal erkläre!
 
Neue Frage »
Antworten »


Verwandte Themen