Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

1

02.06.2010, 15:27

ctime erros

Hi,

ich habe eben in meinem Spiel die Funktionen die die Zeit handhaben in eine eigene Klasse ausgelagert und kriege plötzlich 242 Fehler.


Hier ein kleiner Auszug:

Zitat


1>C:\Programme\Microsoft Visual Studio 9.0\VC\include\ctime(19) : error C2039: 'clock_t': Ist kein Element von '`global namespace''
1>C:\Programme\Microsoft Visual Studio 9.0\VC\include\ctime(19) : error C2873: 'clock_t': Das Symbol kann nicht in einer using-Deklaration verwendet werden
1>C:\Programme\Microsoft Visual Studio 9.0\VC\include\ctime(21) : error C2039: 'asctime': Ist kein Element von '`global namespace''
1>C:\Programme\Microsoft Visual Studio 9.0\VC\include\ctime(21) : error C2873: 'asctime': Das Symbol kann nicht in einer using-Deklaration verwendet werden
1>C:\Programme\Microsoft Visual Studio 9.0\VC\include\ctime(21) : error C2039: 'clock': Ist kein Element von '`global namespace''
1>C:\Programme\Microsoft Visual Studio 9.0\VC\include\ctime(21) : error C2873: 'clock': Das Symbol kann nicht in einer using-Deklaration verwendet werden


Die neue Klasse:

C-/C++-Quelltext

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
#ifndef _TIME_
#define _TIME_

#include <SFML/Window.hpp>

#include "Singleton.h"



#define g_pTime CTime::Get ()


class CTime: public TSingleton<CTime> 
{

public:

float getframetime ();


private:

    sf::Clock Clock;
    float time;


};

#endif



C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "Time.h"

float CTime::getframetime()
{

time = 0;

time += Clock.GetElapsedTime ();
Clock.Reset ();

return time;


}



Das ist die einzigste Klasse wo ctime.h includiert wird:

C-/C++-Quelltext

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
#ifndef _DATUM_
#define _DATUM_

#include <iostream>
#include <string>
#include <ctime>
#include <sstream>

class Datum 
{

public:

void m_init (int tag, int monat, int jahr);
void m_init ();
void m_print ();
string getdatumstring ();


private:

int tag;
int monat;
int jahr;

struct tm *zeit;

time_t date;



};

#endif




Ich kann mir nicht erklären wieso das jetzt passiert ist nur weil ich die Klasse hinzugefügt habe.

Gruß
Errschaffer

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

02.06.2010, 15:42

Das Zeug aus <ctime> liegt im namespace std ;)

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

3

03.06.2010, 18:18

So es lag daran das die Dateinamen sind überschnitten haben. Habe meine Time.h umbenannt und schon gings. Danke. Ka ob du das meinstest ^^

Ein Problem hab ich aber noch:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void CMenue::renderintro ()
{

while (time < 5)
{
    time = g_pTime->getframetime();
    
    g_pFramework->pApp->Clear ();


Zitat

.\Source\Menue.cpp(128) : error C2440: '=': 'CTime *' kann nicht in 'float' konvertiert werden
1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
1>.\Source\Menue.cpp(128) : error C2143: Syntaxfehler: Es fehlt ';' vor '->'

Die Funkttion gibt doch float zurück. Weiteren Code findest ihr im ersten Post.

4

04.06.2010, 10:53

das sieht eherv so aus, als kapiere der compiler nicht, das du im enteffekt CTime::Get()->getframetime() machen willst, und versucht, CTime::Get() time zuzuweisen, qährend er sich glecihzeitig beschwert, das da noch ->getframetime rumläuft. also liegt der Fehler entweder bei CTime::Get() oder bei dem #define, wobei letzteres richtig aussieht, gib mal den code von TSingleton

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

5

05.06.2010, 18:48

C-/C++-Quelltext

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
#ifndef SINGLETON_HPP
#define SINGLETON_HPP

template <class T>



class TSingleton
{
  protected:

  // Membervariablen
  static T *m_pSingleton;   // Statisches Objekt

  public:

  // Memberfunktionen

  // Destruktor
  //
  virtual ~TSingleton ()
  {
  }

  // Get
  //
  // Aufgabe: Wenn nötig, statisches Objekt erzeugen und
  // Zeiger darauf zurückgeben
  //
  inline static T* Get ()
  {
    // Existiert schon eine Instanz?
    if (!m_pSingleton)
    m_pSingleton = new T;   // Nein, dann neue Instanz erzeugen

    // Zeiger auf die Instanz zurückgeben
    return (m_pSingleton);

  } // Get

  // Statisches Objekt freigeben
  //
  static void Del ()
  {
    // Gab es eine Instanz?
    if (m_pSingleton)
    {
      delete (m_pSingleton);  // Ja, dann freigeben
      m_pSingleton = NULL;    // und Zeiger auf NULL setzen
    }

  } // Del

};

// Die statische Variable erzeugen
//
template <class T>
T* TSingleton<T>::m_pSingleton = 0;

#endif


Ist eigentlich genau die Klasse aus dem Buch von Heiko. Und CFramework hat ja auch einen Singelton und da funktioniert es.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

6

09.06.2010, 19:39

Igrendwie ist noch ein ; hinter das #define gerutscht. Das war der Fehler. Konnte man auch hier nicht sehen weil hier das Semikolon noch nicht war. Naja. Zukünftig besser keine defines mehr. Wurde mir schon oft abgeraten :D

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

09.06.2010, 22:01

genau so solltest du keine singletons benutzen. ich hab vorgestern drei stunden damit verbracht sie aus unserem projekt zu entfernen und da hab ich gleich alle fehler gefunden.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige