Werte über funktionsaufruf an Klasse übergeben
-
Hey Leute,
also es sieht wie folgt aus :
Klasse :
class sPlayer { public: double spielzeit; int start_time; };dann die funktion
int cWorld::Greenvillage(sPlayer *wPlayer) { //Spielzeit berechner wPlayer.start_time=start_zeit();wPlayer.start_time=start_zeit();Hier möchte ich in der Elementvariable start_time der Klasse sPlayer und dem Object wPlayer den Return wert der FUnktion start_zeit() übergeben die wie folgt aussieht :
int start_zeit() { time_t start; time (&start); //Zeit wird genommen return start; // und an die obere funktion übergeben }Nun mekkert mein Compiler aber und sagt :
error: request for member start_time in wPlayer which is of non-class type sPlayer*
Habt ihr ne ahnung warum ? , weil in der Klasse steht es ja und sonst dürfte doch auch alles richtig sein ... Falls ich irgendwas vergessen hab zu Posten sagt es bitte ...
MFG Toa
-
int start_zeit() { time_t start; time (&start); //Zeit wird genommen return start; // und an die obere funktion übergeben }Kompiliert das überhaupt? kann time_t einfach in int konvertiert werden? Ich glaub kaum...
Ansonsten:
int cWorld::Greenvillage(sPlayer *wPlayer) { //Spielzeit berechner wPlayer.start_time=start_zeit();wPlayer ist ein Zeiger, also -> nehmen.
Maxi
-
Dankeschön hab jetzt ein anderes Problem

Ich speichere die differenz der start und end zeit die wiederum in einer klasse steht :
system("cls"); cout << "Waehle einen Accountnamen:" << flush; // unter welchem namen soll es gespeichert werden string file_name; cin >> file_name; CreateDirectory("Saves", NULL); //legt ordner save an file_name.insert(0, "Saves\\"); if (file_name.substr(file_name.length() - 4) != ".sav") //Hängt an den namen ein Sav file_name += ".sav"; //ZEIT PART int ende_time=ende_zeit(); //ende der Zeit nahme if(wPlayer.spielzeit < 120) { int neue_diff= difftime (ende_time,wPlayer.start_time); wPlayer.spielzeit + neue_diff; } else { wPlayer.spielzeit = difftime (ende_time,wPlayer.start_time); //berechnet die differenz }dieser Teil soll eigentlich überprüfen ob die file exestiert wenn ja soll sie die schon vorhandene eingelesene spielzeit mit der neuen addieren und dann wieder sichern wenn die file noch nicht exestiert also noch kein spielzeit wert da ist soll sie die differenz gleich der spielzeit setzen, nur ich weiß nicht wie ich überPrüfen kann ob die file schon da ist .
nfout.write(reinterpret_cast<const char*>(&(wPlayer.spielzeit)), sizeof(wPlayer.spielzeit));so wird das ganze gesichert .
und dann kehrt man zurück und eine neue zeit wird genommen (wie folgt) :
wPlayer->start_time=start_zeit();und wenn man dann wieder speichert sollte eigentlich die neue und die alte addiert werden. Nur das ist nicht der fall

weiß jemand warum ? ...
-
wPlayer.spielzeit += neue_diff;
-
thx hab jetzt noch eine Warnung weil ich etwas falsch convertiere :
src\World\World.cpp: In member function
void cWorld::umrechnen\_und\_ausgeben(sPlayer*)': src\\World\\World.cpp:576: warning: converting to \int' from `double'void cWorld::umrechnen_und_ausgeben(sPlayer *wPlayer) { system("cls"); int zeit= wPlayer->spielzeit; double stunden = zeit / 3600; // ab hier wird die Spielzeit in sec in Minuten STunden und Sec umgerechnet zeit = zeit % 3600; double minuten = zeit / 60; zeit = zeit % 60; double sekunden = zeit; cout <<stunden <<" Stunden " << minuten <<" Minuten " << sekunden <<" Sekunden " <<"\n"; // hier wird die Spielzeit ausgegeben system("pause"); //einfache Pause cWorld zurueck; zurueck.Kirche(wPlayer); }liegt wahrscheinluch daran das die spielzeit in der Klasse als : double spielzeit; definiert ist nur wenn ich Zeit von int zu einem double mach gibts folgenden Fehler :
invalid operands of types double and int to binary operator%
Hoffe ihr könnt mir helfen
-
Hmm du machst de nen haufen sachen nen bissel komisch ...
#include <ctime> class Player { public: void set_time_played(const unsigned int time) { m_timePlayed = time; } void set_time_start(const unsigned int time) { m_timeStart = time; } unsigned int get_time_played() const { return m_timePlayed; } unsigned int get_time_start() const { return m_timeStart; } private: std::time_t m_timePlayed; std::time_t m_timeStart; };#include <ctime> class World { int Greenvillage(Player&); std::time_t calc_start_time() const { return std::time(0); } }; int World::Greenvillage(Player& player) { player.set_time_start(calc_start_time()); return 0; }...
#include <cstdio> #include <iostream> #include <string> #include <fstream> // --- // std::system("cls"); std::cout << "Benutzername: " << std::flush; std::string file_name; std::getline(std::cin, file_name); file_name.insert(0, "saves/"); file_name += ".sav"; std::ofstream file_stream(file_name.c_str(), std::ios::out); if (!file_stream) return false; std::time_t time_end = calc_time_end(); player.set_time_played(std::difftime(time_end, player.get_time_start()) + (player.get_time_played() < 120 ? player.get_time_played() : 0));... am einfachsten kannst du feststellen ob die Spielzeit schon da ist, in dem du hingehst und die 1. Zeile ausliest ... diese per std::ostringstream in einen unsigned int dateitypen ostreamen lässt und wenn das alles erfolgreich ist und kein failbit dabei gesetzt wird ... steht da bereits eine Zahl in der Datei ...
-
[ignoriert dies]
-
Mh.. bis ich das jetzt eingebaut hab wie ich es brauche vergehen wieder ein paar Stunden , haste net einfach ne Idee wie ich die Conertierung oben also den Error beheben kann weil ich wandel ja ein double in ein int um aber wenn ich es ändere kommt der andere fehler

-
Naja es ist halt stylistisch und auch vom technischen so wie du es hast nicht in Ordnung ... hmm um dir deins aber zum laufen zu bringen:
double time_played = static_cast<double>(wPlayer->spielzeit); double hours = time_played / 3600; time_played = time_played % 3600; double minutes = time_played / 60; time_played = time_played % 60; std::cout << "Spielzeit: " << hours << "h " << minutes << "min " << time_played << "s" << std::endl; std::system("pause");...
aber unschön ^^
-
Invalid operands of Types double and int to binary operator%
time_played = time_played % 3600;und wie kann ich das umcasten ??
int neue_diff= difftime (ende_time,wPlayer.start_time);*schnief*
-
double time_played = static_cast<double>(wPlayer->spielzeit); double hours = time_played / 3600.0; time_played = time_played % 3600.0; double minutes = time_played / 60.0; time_played = time_played % 60.0; std::cout << "Spielzeit: " << hours << "h " << minutes << "min " << time_played << "s" << std::endl; std::system("pause");... so ... dann weiß der das 3600 ein double ist ...
-
Mh.. jetzt meckert er weil er zwei double hat
invalid operands of types double and double to binary operator%
-
% arbeitet nur mit Integern. Wenn du double verwenden willst, dann schau dir mal dir Funktion fmod an.
-
Also ich hab mir die FUnktion angesehen und hab es jetzt so gemacht nur das klappt bei der ausgabe nicht ganz , es werden nämlich nach paar sekunden schon 5 stunden angezeigt xD
double time_played = static_cast<double>(wPlayer->spielzeit); double hours = time_played / 3600.0; time_played = fmod(time_played,3600); double minutes = time_played / 60.0; time_played = fmod(time_played,60.0); std::cout << "Spielzeit: " << hours << "h " << minutes << "min " << time_played << "s" << std::endl; std::system("pause");Ps : hab noch ne kleine zwischen Frage kann man ein Konsolen fenster feststellen das die größe nicht mehr veränderbar ist ? bin auf GetConsoleScreenBufferInfo gestoßen weiß abba net wie ichs anwenden soll