"non-aggregate type foo()()" ????
-
Guten Morgen zusammen,
ich hoffe ihr habt die Feiertage alle gut überstanden und freut Euch schon
aufs nächste FestWürde ich auch gerne tun, hätte ich nicht ein (vermutlich) ganz dummes
Problem mit meinem Compiler (Der Drecksack *g*):Wieso führt:
#include "Log.h" //... Log g_Log; //... g_Log.foo(); //...
Zu folgender Fehlermeldung?
request for member `foo' in `g_Log()', which is of non-aggregate type `Log*()()'??Und was sollte mir das überhaupt sagen???
Gruß,
Khadgar
-
-
Du darfst foo() nicht außerhalb von Funktionen aufrufen. Wann soll der Compiler diesen Befehl ausführen?
-
Es tut mir leid wenn ich mich Heute Morgen zu kurz gefasst habe.
Ich werde hier statt des Beispiels mal die ensprechend relevanten Code-Stellen
posten und hoffe einer von Euch da draussen sieht dadurch was mir verborgen
bleibtSDLManager.h
#include "sdl.h" #include "SDL_mixer.h" #include "debug/Log.h" class SDLManager { public: SDLManager(); ~SDLManager(); bool setupSubsystems(Log &log); SDL_Surface* setupVideo(Log &log, int width, int height, int depth, bool fullscreen); bool setupAudio(Log &log); void setupWindow(const char* path, const char* title, const char* icon); void drawImage(SDL_Surface *img, SDL_Surface *screen, int x, int y); void drawImage(SDL_Surface *img, SDL_Surface *screen, int x, int y, int w, int h, int x2, int y2); char m_cError[255]; };
SDLManager.cpp
#include "SDLManager.h" SDLManager::SDLManager() { } SDLManager::~SDLManager() { } bool SDLManager::setupSubsystems(Log &log) { if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_TIMER) < 0) { sprintf(m_cError, "Couldn't initialize SDL subsystems: %s", SDL_GetError()); log.writeString(m_cError); return false; } return true; } SDL_Surface* SDLManager::setupVideo(Log &log, int width, int height, int depth, bool isFullscreen) { SDL_Surface *screen; if (isFullscreen) { screen = SDL_SetVideoMode(width, height, depth, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN); } else { screen = SDL_SetVideoMode(width, height, depth, SDL_HWSURFACE | SDL_DOUBLEBUF); } if (screen == NULL) { sprintf(m_cError, "Couldn't setup video %d x &d x %d: %s", width, height, depth, SDL_GetError()); return NULL; } return screen; } bool SDLManager::setupAudio(Log &log) { if (Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 2048) < 0) { sprintf(m_cError, "Couldn't setup audio: %s", SDL_GetError()); return false; } return true; } void SDLManager::setupWindow(const char* path, const char* title, const char* icon) { SDL_WM_SetIcon(SDL_LoadBMP(path), NULL); SDL_WM_SetCaption(title, icon); } void SDLManager::drawImage(SDL_Surface *img, SDL_Surface *screen, int x, int y) { SDL_Rect dest; dest.x = x; dest.y = y; SDL_BlitSurface(img, NULL, screen, &dest); } void SDLManager::drawImage(SDL_Surface *img, SDL_Surface *screen, int x, int y, int w, int h, int x2, int y2) { SDL_Rect dest; dest.x = x; dest.y = y; SDL_Rect dest2; dest2.x = x2; dest2.y = y2; dest2.w = w; dest2.h = h; SDL_BlitSurface(img, &dest2, screen, &dest); }
Ausschnitt aus der main-Methode
#include "debug/Log.h" //... Log g_Log("Projekt28Log.txt"); SDLManager g_SDLManager(); //... int main(int argc, char *argv[]) { if (! g_SDLManager.setupSubsystems(g_Log)) return 0; if (( g_pScreen = g_SDLManager.setupVideo(g_Log, g_iScreenWidth, g_iScreenHeight, 16, false)) == NULL) return 0; if (! g_SDLManager.setupAudio(g_Log)) return 0; //...
Und zu guter Letzt: Das Kompiler-Log
*
Compiler: Default compiler
Building Makefile: "C:\Dokumente und Einstellungen\Andreas\Eigene Dateien\C++\Projekt28\Makefile.win"
Führt make... aus
make.exe -f "C:\Dokumente und Einstellungen\Andreas\Eigene Dateien\C++\Projekt28\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"C:/Programme/Dev-Cpp/include/c++" -I"C:/Programme/Dev-Cpp/include/c++/mingw32" -I"C:/Programme/Dev-Cpp/include/c++/backward" -I"C:/Programme/Dev-Cpp/include" -I"C:/Programme/Dev-Cpp/include/SDL"main.cpp: In function
int SDL_main(int, char**)': main.cpp:64: request for member \
setupSubsystems' in `g_SDLManager()', which is
of non-aggregate typeSDLManager ()()' main.cpp:65: request for member \
setupVideo' in `g_SDLManager()', which is of
non-aggregate typeSDLManager ()()' main.cpp:66: request for member \
setupAudio' in `g_SDLManager()', which is of
non-aggregate typeSDLManager ()()' main.cpp:71: request for member \
setupWindow' in `g_SDLManager()', which is of
non-aggregate type `SDLManager ()()'make.exe: *** [main.o] Error 1
Ausführung beendet*Wahrscheinlich ist das irgendein ganz trivialer Fehler und ich blicks einfach
nichtKönnt Ihr mir helfen?
Danke im Voraus,
Khadgar
-
SDLManager g_SDLManager();
vergleiche das mal mit folgendem, äquivalentem konstrukt
int funktion();
kommt dir da etwas komisch vor?
-
Dank dir Shade Of Mine!
Irgendwie musste es ja sowas absolut dummes sein
Vielen Dank auch dir doreen, nach dem Hinweis von Shade verstehe ich jetzt
auch den geposteten LinkIch werds nochmal durcharbeiten.