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

1

16.10.2008, 19:49

[VC++ 08 EE] Klasse wird nicht erkannt?

Und zwar beschwert sich der Compiler bei folgender Klasse zunächst über eine Typneudefinition, wobei er auf eben diese Klasse verweist, anschließend behauptet er, sie wäre NICHT definiert, und selbiges über ihre membervariablen. Ich bin mit meinem Latein am ende, weiß irgendjemand von euch, was ich falsch gemacht hab?
Hier die Klasse (gekürzt):

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
//Klassendeklaration von Win

#include "blocker.h"

#pragma once
#ifndef Win

class Win:public uf::Singleton<Win>, uf::Logable, Ogre::FrameListener
{
private:
    std::fstream    mConfigFile;        //Konfigurationsdatei

    //Thread

    HANDLE          mThread;            //Handle des threads

    bool            mExitThread;        //soll der Thread schnellstmöglich verlassen werden

    bool            mThreadRunning;     //läuft der Thread?

    //Angaben zum Fenster

    int     mWidth;
    int     mHeight;
    bool    mFullscreen;
    int     mColorDepth;
    int     mFSAA;  //AntiAlising

    //Windows

    HWND                        mWin;   //handle des Fensters

public:
    //Zeiger zum schnellen Zugriff

    static uf::Logfile* Log;
    //konstruktor und Destruktor

    Win() {}
    uf::Result Init(HINSTANCE hInst);
    ~Win();
    //Windows-funktionen                                                                //Nachrichtenschleife

    static LRESULT CALLBACK WindowProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam);  //Fenster-Rückruffunktion => Steuerung!

    //Hilfsfunktionen

    std::string ConfigSearchEntry(std::string Name);    //Sucht Eintrag in der Konfigurationsdatei

};

uf::Logfile*    Win::Log = uf::Logfile::Instance();

#endif

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

16.10.2008, 19:55

Wo tritt denn der Fehler auf?
@D13_Dreinig

3

16.10.2008, 20:04

Zitat von »"David_pb"«

Wo tritt denn der Fehler auf?

beim Kompilieren:

Quellcode

1
2
1>c:\c++\blocker\win.h(7) : error C2011: 'Win': 'class' Typneudefinition
1>        c:\c++\blocker\win.h(7): Siehe Deklaration von 'Win'

danach dann wie gesagt 'Win' und die Membervariablen als undefinierte Bezeichner, überall, wo sie aufgerufen werden (ja, ich hab da jeweils #include "Win.h" drin)

4

16.10.2008, 20:14

Öhm... hat zwar nicht direkt was mitm problem zu tun, aber: seh nur ich das so oder ist das #ifndef unterm #pragma once eher sinnlos? solange Win nicht defined wird ists eher sinnlos darauf zu prüfen (und ich würd den includeguard auch vor die includes setzen)

5

16.10.2008, 20:25

Zitat von »"Genion"«

Öhm... hat zwar nicht direkt was mitm problem zu tun, aber: seh nur ich das so oder ist das #ifndef unterm #pragma once eher sinnlos? solange Win nicht defined wird ists eher sinnlos darauf zu prüfen (und ich würd den includeguard auch vor die includes setzen)

naja, wo der sich über eine Neudefinition beschwerte, dachte ich, die Datei wäre irgendwo mehrfach eingebunden, also hab ich n Pragma once reingesetzt, als das nichts gebracht hat noch das #ifndef.
Was die Postition des #ifndef angeht: du hast Recht :oops:
Was das funktionieren des #ifndef angeht: ich wollte eigentlich prüfen, ob der Bezeichner (->die Klasse ;) ) 'Win' definiert ist - geht das so nicht?

6

16.10.2008, 20:31

Zitat von »"PCShadow"«

Zitat von »"Genion"«

Öhm... hat zwar nicht direkt was mitm problem zu tun, aber: seh nur ich das so oder ist das #ifndef unterm #pragma once eher sinnlos? solange Win nicht defined wird ists eher sinnlos darauf zu prüfen (und ich würd den includeguard auch vor die includes setzen)

naja, wo der sich über eine Neudefinition beschwerte, dachte ich, die Datei wäre irgendwo mehrfach eingebunden, also hab ich n Pragma once reingesetzt, als das nichts gebracht hat noch das #ifndef.
Was die Postition des #ifndef angeht: du hast Recht :oops:
Was das funktionieren des #ifndef angeht: ich wollte eigentlich prüfen, ob der Bezeichner (->die Klasse ;) ) 'Win' definiert ist - geht das so nicht?
öhm... ich denke nicht :) aber #pragma müsste eigentlich auch funktionieren, wenns nicht am anfang steht... aber irgendwie glaube ich dennoch, dass du den header mehrfach einbindest (sieht halt so aus :))
kannst ja mal alles durchschauen ob irgendwo die möglichkeit besteht ;)

7

16.10.2008, 20:36

Zitat von »"Genion"«

öhm... ich denke nicht :) aber #pragma müsste eigentlich auch funktionieren, wenns nicht am anfang steht... aber irgendwie glaube ich dennoch, dass du den header mehrfach einbindest (sieht halt so aus :))
kannst ja mal alles durchschauen ob irgendwo die möglichkeit besteht ;)

so, jetz hab ich das #ifndef richitg gemacht (zugehöriges #define und andere Bezeichnung, außerdem richitge Position), jetzt funktionierts (warum auch immer der Pragma once net wollte :? ); danke!

8

16.10.2008, 20:51

Jetzi st noch ein anderer Fehler (bzw. Problem meinerseits) aufgetaucht: wie erhalte ich einen Zeiger auf eine nicht-statische Memberfunktion einer Klasse?
meine Bisherigen Versuche:

C-/C++-Quelltext

1
2
3
Win::Instance()->WindowProc //ich weiß allerdings nicht mehr, was der Fehler war, nur das der VC vorschlug, ich sollte '&' verwenden, um einen Zeiger zu erhalten

&Win::Instance()->WindowProc //VC: "konvertierung von LRESULT (__stdcall) (Win*)(HWND,UINT,LPARAM,WPARAM) nach WNDPROC nicht möglich"

&(Win::Instance()->WindowProc) //VC: "1>c:\c++\blocker\blocker.cpp(7) : error C2276: '&': Ungültige Operation auf Ausdruck einer gebundenen Memberfunktion"

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

16.10.2008, 21:04

C-/C++-Quelltext

1
&Win::WindowProc
@D13_Dreinig

10

16.10.2008, 21:06

Zitat von »"David_pb"«

C-/C++-Quelltext

1
&Win::WindowProc

nützt mir aber nichts wenn die funktion nicht statisch ist, und wenn ich se statisch mache, kann ich nicht mehr auf die Membervariablen zugreifen - oder geht das, wenn ich die benötigten Membervariablen auch statisch mache :?
einen Versuch ist es Wert!

Werbeanzeige