Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Code schreiben C++ » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
InformaTiger

Nein, das habe ich in der Tat nicht großes Grinsen großes Grinsen
Diese Zeile macht nichts anderes als bei deinem Array den i-ten CTitle herauszuholen und über die Methode getDuration() die du in deiner CTitle-Klasse definiert hast abzurufen. Und da sollte selbstverständlich ein += statt dem = stehen. Mein Fehler, sorry.

Mit freundlichen Grüßen
InformaTiger
SSD

totalPlayTime = m_titles[i].getDuration();

Kannst du mir vielleicht ein wenig diese Zeile erklären ?

Viel Kundschaft scheint du ja in diesem Forum nicht zu haben großes Grinsen
SSD

Ok alles klar großes Grinsen
InformaTiger

Es kann so leider nie funktionieren. Deine Schleife läuft genau einmal und bricht dann ab weil der return Befehl aufgerufen wird. Zudem gibt dieser einen CTitle Zeiger zurück obwohl in der Methodendeklaration als Typ Integer angegeben wurde.
Dazu kommt, dass dein temp_mtitles in jedem Schleifendurchlauf neu erzeugt wird und seinen Wert deshalb jedesmal überschreibt.

Verwende deshalb bitte meinen Weg, wie ich ihn im obigen Beispiel beschrieben habe. Ansonsten kann ich dir leider nicht mehr helfen.

Mit freundlichen Grüßen
InformaTiger
SSD

Ich will es nochmal über meinen Weg probieren großes Grinsen

Ich habe ee mal probiert
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:
#include <string>
#include<iostream>
using namespace std;
#include  "CPlaylist.h"
#include "CTitle.h"




CPlaylist::CPlaylist(int initialSize ){
    if (initialSize <= 0){
        initialSize = 5;
    }
    m_arraySize = initialSize;

    m_titles = (CTitle**)malloc(m_arraySize * sizeof(CTitle*));
    if (m_titles == NULL){
        throw "Failed to allocate memory.";
    }
}

CPlaylist::~CPlaylist(){

	free(m_titles);

}

void CPlaylist::add(CTitle* title){
	if (m_nextFree + 1 >= m_arraySize){
	        m_titles = realloc(m_titles, m_arraySize + 5);
	        if (m_titles == NULL){
	            throw "Failed to allocate memory";
	        }
	        m_arraySize += 5;
	    }
	    *(m_titles+m_nextFree++) = title;
	}

}


int const CPlaylist::totalPlayTime(){
	for( int i = 0; i<m_arraySize; i++){
		int temp_mtitles;
		temp_mtitles = temp_mtitles[i] +m_titles;
		CTitle* temp = new CTitle(temp_mtitles);
		return* temp;


	}


}



Wo liegen die Fehler jetzt?

Ich habe auch bei Eclipse noch Fehlermeldungen leider großes Grinsen

Description Resource Path Location Type
expected declaration before '}' token CPlaylist.cpp /CTitle line 46 C/C++ Problem
invalid conversion from 'void*' to 'CTitle**' [-fpermissive] CPlaylist.cpp /CTitle line 37 C/C++ Problem
No return, in function returning non-void CPlaylist.cpp /CTitle line 49 Code Analysis Problem
InformaTiger

Nicht ganz, deine temporäre Variable sollte innerhalb des Funktionsblocks liegen und bei der for-schleife musst du anstatt der Beistriche Semikolons setzen.

Außerdem solltest du die Bedingung i > 0 noch einmal überdenken: es sollte wohl vermutlich i < m_arraySize heißen, wenn du von 0 bis m_arraySize durch iterieren willst. m_arraySize darfst du während der Schleife auf keinen Fall hochzählen, da du ansonsten ja über den Speicherbereich hinausgreifst.

Zu guter letzt sollte deine Spielzeit doch vom Typ int sein, das heißt wenn du in Zeile 4 einen CTitle* daraus machst hat das ganze relativ wenig Sinn. Stattdessen solltest du dir einen Titel aus dem Array herausholen und dessen Spielzeit auf die temporäre Variable aufsummieren.

So in etwa:

code:
1:
2:
3:
4:
5:
6:
7:
8:
int CPlaylist::totalPlayTime(){
    int totalPlayTime = 0;

    for (int i = 0; i < m_arraySize; i++){
        totalPlayTime += m_titles[i].getDuration();
    }
    return totalPlayTime;
}


Mit freundlichen Grüßen
InformaTiger
SSD

So etwa?
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
int temp_mtitles;
int const CPlaylist::totalPlayTime(){
	for( int i = 0 , i>0, i++){
		temp_mtitles = temp_mtitles +m_titles;
		CTitle** temp = new CTitle(temp_mtitles);
		return** temp;


	}





Oder soll ich bei der for schleife m_arraySize++ machen?
InformaTiger

Du musst nur über alle Titel in der Songliste (von 0 bis m_arraySize) durch iterieren und beim jeweiligen Eintrag in m_titles die Spieldauer herausholen. Dies summierst du auf eine lokale Variable auf und gibst diese am Ende deiner Funktion zurück. Das sollte den Job für dich erledigen smile

Mit freundlichen Grüßen
InformaTiger
SSD

Tipps für die g)?
InformaTiger

Klar. Also ich überprüfe in Zeile 2 ob die aktuelle Anzahl plus eins (das neue Element) die Arraygröße übersteigt und falls ja, reallokiere (realloc erweitert bzw verkleinert einen bestehenden Speicherblock) ich den Speicher mit der Größe m_arraySize + 5 (steht in der Angabe). Und das += ist nur eine andere Schreibweise für m_arraySize = m_arraySize + 5.

Ich hoffe das hilft. smile

Mit freundlichen Grüßen
InformaTiger
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.