|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jakozk Junior JLI'ler
Anmeldedatum: 16.05.2004 Beiträge: 88 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 25.12.2004, 21:30 Titel: Lokale Funktionsdefinitionen sind unzulaessig!?!?!? |
|
|
also hab mal ne frage ^^ ich habe eine Funktion
Code: |
int Render(void)
{
COLORREF SetPixel(HDC hDC,int x, int y,COLORREF crcolor);
}
int Move(void)
{
RECT ClipRect;
GetClipBox(hDC, &ClipRect);
FillRect(hDC, &ClipRect, (HBRUSH)GetStockObject(WHITE_BRUSH));
}
|
dan gibt er mir diesen fehler aus .
Code: |
Kompilierung läuft...
Main.cpp
D:\Programme\Microsoft Visual Studio\MyProjects\test\Main.cpp(111) : error C2601: 'Render' : Lokale Funktionsdefinitionen sind unzulaessig
D:\Programme\Microsoft Visual Studio\MyProjects\test\Main.cpp(118) : error C2601: 'Move' : Lokale Funktionsdefinitionen sind unzulaessig
Fehler beim Ausführen von cl.exe.
Main.obj - 2 Fehler, 0 Warnung(en)
|
na gut meine frage is wieso kommt da dieser fehler ... und wie kann ich den fehler beheben ?
thx im voraus .. und habt erbarmen mit meinen (nicht vorhandenen) Kennstnissen .. ^^ |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 25.12.2004, 21:36 Titel: |
|
|
Code: | int Render(void)
{
COLORREF SetPixel(HDC hDC,int x, int y,COLORREF crcolor);
} |
Also wenn ich sowas sehe würd ich auch Streiken
Mal ehrlich: Was soll es bringen eine Funktion zu deklarieren/Definieren in einer Funktion?
Das wäre so als wenn Deine Freundin schwanger ist mit einer Tochter im Bauch die auch schwanger ist
Kurz: Finger weg von sowas. _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
Jakozk Junior JLI'ler
Anmeldedatum: 16.05.2004 Beiträge: 88 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 25.12.2004, 21:38 Titel: |
|
|
ah ok ^^ ..
aber wie kann ich das machen das er in einer Funktion ein Pixel aus gibt ...
@ Patrick : bitte nich so ein schweren code |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 25.12.2004, 21:44 Titel: |
|
|
Code: |
void DrawTestPixel (void)
{
// Male einen Roten Pixel auf das globale HDC (g_hdc) an
// Position 50x50 in der Farbe Blau mit der GDI-Funktion ::SetPixel
::SetPixel (g_hdc, 50, 50, RGB(0,0,255);
} |
_________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
Jakozk Junior JLI'ler
Anmeldedatum: 16.05.2004 Beiträge: 88 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 25.12.2004, 21:45 Titel: |
|
|
ahhh coool thx ! werd gleich mal ausprobieren ^^ |
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 25.12.2004, 21:55 Titel: |
|
|
hm lol?
Oder schau mal ob du ne } vergessen hast weiter oben. |
|
Nach oben |
|
|
Jakozk Junior JLI'ler
Anmeldedatum: 16.05.2004 Beiträge: 88 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 25.12.2004, 21:57 Titel: |
|
|
also ... leider funzt es immer noch nich und es is ein fehler dazu gekommen ^^ hier der code
Code: |
case WM_TIMER:
Render();
Move();
return 0;
break;
int Render(void)
{
::SetPixel(g_hdc, x, y, RGB(0,0,255);
}
int Move(void)
{
RECT ClipRect;
GetClipBox(hDC, &ClipRect);
FillRect(hDC, &ClipRect, (HBRUSH)GetStockObject(WHITE_BRUSH));
}
|
und hier wieder die fehler
Code: |
Kompilierung läuft...
Main.cpp
D:\Programme\Microsoft Visual Studio\MyProjects\World of Pixels\Main.cpp(111) : error C2601: 'Render' : Lokale Funktionsdefinitionen sind unzulaessig
D:\Programme\Microsoft Visual Studio\MyProjects\World of Pixels\Main.cpp(114) : error C2958: Fuer das linke Trennzeichen Klammer '(' an der Stelle 'D:\Programme\Microsoft Visual Studio\MyProjects\test\Main.cpp(113)' gibt es keine Entsprec
hung
D:\Programme\Microsoft Visual Studio\MyProjects\test\Main.cpp(118) : error C2601: 'Move' : Lokale Funktionsdefinitionen sind unzulaessig
Fehler beim Ausführen von cl.exe.
Main.obj - 3 Fehler, 0 Warnung(en) |
|
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 25.12.2004, 22:03 Titel: |
|
|
Jo du hast eben vielleicht bei den Funktionen ne } vor der render funktion vergessen. |
|
Nach oben |
|
|
Jakozk Junior JLI'ler
Anmeldedatum: 16.05.2004 Beiträge: 88 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 25.12.2004, 22:05 Titel: |
|
|
ehm nagut ^^ also ich bin sau verwirrt ... am besten ich zeig euch mal den ganzen quellcode
Code: |
// Headerdatei
#include <windows.h>
// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);
// Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
// Das Fensterhandle
HWND hWnd = 0;
// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz
HINSTANCE hPrevInstance, // Handle der letzten Instanz
LPSTR lpCmdLine, // Kommandozeile
int nCmdShow) // Art wie das Fenster angezeigt werden soll
{
// Fenster erzeugen und Handle speichern
hWnd = CreateMainWindow(hInstance);
// Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
if(0 == hWnd)
{
MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
return 0;
}
// Struktur, in der Informationen zur Nachricht gespeichert werden
MSG msg;
// Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
while(GetMessage(&msg,NULL,0,0))
{
// Nachricht an die Callbackfunktion senden
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Rückgabewert an Windows
return 0;
}
// Fenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass =
{
sizeof(WNDCLASSEX), // Größe angeben
CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW, // Standardstile
MessageHandler, // Callback-Funktion
0, // Zusätzliche Angaben
0, // nicht benötigt
hInstance, // Anwendungsinstanz
LoadIcon(NULL, IDI_WINLOGO), // Windows-Logo
LoadCursor(NULL, IDC_ARROW), // Normaler Cursor
(HBRUSH)GetStockObject(WHITE_BRUSH), // Weißer Pinsel
NULL, // kein Menü
"WindowClass", // Der Name der Klasse
LoadIcon(NULL, IDI_WINLOGO) // Windows Logo
};
RegisterClassEx(&wndClass);
return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen
"WindowClass", // Klassenname
"H4xX0rT", // Fenstertitel
WS_OVERLAPPEDWINDOW | // Fenster
WS_VISIBLE, // Eigenschaften
100, 100, 400, 300, // Anfangsposition und Größe
NULL, // Handle des Elternfensters
NULL, // Handle des Menüs
hInstance, // Anwendungsinstanz
NULL); // wird nicht benötigt
}
int Render(void);
int Move(void);
int x = 200;
int y = 150;
// Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht
// für Ihr Programm vorliegt
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// testen, um welche Nachticht es sich handelt
switch(msg)
{
// wenn das Fenster geschlossen wird, eine Nachricht senden,
// die das Programm beendet
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
SetTimer(hWnd, 55, 1, NULL);//1/30 Sekunden
case WM_TIMER:
Render();
Move();
return 0;
break;
int Render(void)
{
::SetPixel(g_hdc, x, y, RGB(0,0,255);
}
int Move(void)
{
RECT ClipRect;
GetClipBox(hDC, &ClipRect);
FillRect(hDC, &ClipRect, (HBRUSH)GetStockObject(WHITE_BRUSH));
}
}
// Wenn wir uns nicht um die Nachricht gekümmert haben
// wird sie an die Standardnachrichtenverarbeitung von Windows
// geschickt
return DefWindowProc(hwnd, msg, wParam, lParam);
} |
|
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 25.12.2004, 22:07 Titel: |
|
|
lol achso!
Also erst mal etwas dass du wissen solltest:
// Global
int x;
void main()
{
}
void main()
{
int x; // Lokal!
};
Du hast also eine Funktion erstellt in einer anderen drinn, das geht nicht.
Das müsste etwa so sein:
Code: |
// Headerdatei
#include <windows.h>
// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);
// Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
// Das Fensterhandle
HWND hWnd = 0;
// Funktionsprototypen
int Render(void);
int Move(void);
int x = 200;
int y = 150;
// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz
HINSTANCE hPrevInstance, // Handle der letzten Instanz
LPSTR lpCmdLine, // Kommandozeile
int nCmdShow) // Art wie das Fenster angezeigt werden soll
{
// Fenster erzeugen und Handle speichern
hWnd = CreateMainWindow(hInstance);
// Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
if(0 == hWnd)
{
MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
return 0;
}
// Struktur, in der Informationen zur Nachricht gespeichert werden
MSG msg;
// Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
while(GetMessage(&msg,NULL,0,0))
{
// Nachricht an die Callbackfunktion senden
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Rückgabewert an Windows
return 0;
}
// Fenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass =
{
sizeof(WNDCLASSEX), // Größe angeben
CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW, // Standardstile
MessageHandler, // Callback-Funktion
0, // Zusätzliche Angaben
0, // nicht benötigt
hInstance, // Anwendungsinstanz
LoadIcon(NULL, IDI_WINLOGO), // Windows-Logo
LoadCursor(NULL, IDC_ARROW), // Normaler Cursor
(HBRUSH)GetStockObject(WHITE_BRUSH), // Weißer Pinsel
NULL, // kein Menü
"WindowClass", // Der Name der Klasse
LoadIcon(NULL, IDI_WINLOGO) // Windows Logo
};
RegisterClassEx(&wndClass);
return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen
"WindowClass", // Klassenname
"H4xX0rT", // Fenstertitel
WS_OVERLAPPEDWINDOW | // Fenster
WS_VISIBLE, // Eigenschaften
100, 100, 400, 300, // Anfangsposition und Größe
NULL, // Handle des Elternfensters
NULL, // Handle des Menüs
hInstance, // Anwendungsinstanz
NULL); // wird nicht benötigt
}
// Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht
// für Ihr Programm vorliegt
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// testen, um welche Nachticht es sich handelt
switch(msg)
{
// wenn das Fenster geschlossen wird, eine Nachricht senden,
// die das Programm beendet
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
SetTimer(hWnd, 55, 1, NULL);//1/30 Sekunden
case WM_TIMER:
Render();
Move();
return 0;
break;
}
// Wenn wir uns nicht um die Nachricht gekümmert haben
// wird sie an die Standardnachrichtenverarbeitung von Windows
// geschickt
return DefWindowProc(hwnd, msg, wParam, lParam);
}
// Global
int Render(void)
{
::SetPixel(g_hdc, x, y, RGB(0,0,255);
}
int Move(void)
{
RECT ClipRect;
GetClipBox(hDC, &ClipRect);
FillRect(hDC, &ClipRect, (HBRUSH)GetStockObject(WHITE_BRUSH));
} |
Denn deine Prototypen sind ja auch global, also musst du die funktionen auch im globalen Bereich ausschreiben.
Zuletzt bearbeitet von Beni5 am 25.12.2004, 22:10, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Jakozk Junior JLI'ler
Anmeldedatum: 16.05.2004 Beiträge: 88 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 25.12.2004, 22:10 Titel: |
|
|
ahh ^^ sry Beni5 ^^ hab dein edit nich gesehen ^^ also danke fuer help
ich werds mal probieren ^^ ... und sry wegen meiner worte ;P
Zuletzt bearbeitet von Jakozk am 25.12.2004, 22:12, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 25.12.2004, 22:11 Titel: |
|
|
Ämm... du definierst Funktionen in einer Funiktion, bei dir:
Du definierst Render und Move in der Funktion MessageHandler. Das geht nicht! Der korrekte Code wäre:
Code: |
// Headerdatei
#include <windows.h>
// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);
// Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
int Render(void);
int Move(void);
int x = 200;
int y = 150;
// Das Fensterhandle
HWND hWnd = 0;
// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz
HINSTANCE hPrevInstance, // Handle der letzten Instanz
LPSTR lpCmdLine, // Kommandozeile
int nCmdShow) // Art wie das Fenster angezeigt werden soll
{
// Fenster erzeugen und Handle speichern
hWnd = CreateMainWindow(hInstance);
// Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
if(0 == hWnd)
{
MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
return 0;
}
SetTimer(hWnd, 1,55, NULL);//1/30 Sekunden
// Struktur, in der Informationen zur Nachricht gespeichert werden
MSG msg;
// Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
while(GetMessage(&msg,NULL,0,0))
{
// Nachricht an die Callbackfunktion senden
TranslateMessage(&msg);
DispatchMessage(&msg);
}
KillTimer(hWnd,1);
// Rückgabewert an Windows
return 0;
}
// Fenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass =
{
sizeof(WNDCLASSEX), // Größe angeben
CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW, // Standardstile
MessageHandler, // Callback-Funktion
0, // Zusätzliche Angaben
0, // nicht benötigt
hInstance, // Anwendungsinstanz
LoadIcon(NULL, IDI_WINLOGO), // Windows-Logo
LoadCursor(NULL, IDC_ARROW), // Normaler Cursor
(HBRUSH)GetStockObject(WHITE_BRUSH), // Weißer Pinsel
NULL, // kein Menü
"WindowClass", // Der Name der Klasse
LoadIcon(NULL, IDI_WINLOGO) // Windows Logo
};
RegisterClassEx(&wndClass);
return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen
"WindowClass", // Klassenname
"H4xX0rT", // Fenstertitel
WS_OVERLAPPEDWINDOW | // Fenster
WS_VISIBLE, // Eigenschaften
100, 100, 400, 300, // Anfangsposition und Größe
NULL, // Handle des Elternfensters
NULL, // Handle des Menüs
hInstance, // Anwendungsinstanz
NULL); // wird nicht benötigt
}
// Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht
// für Ihr Programm vorliegt
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// testen, um welche Nachticht es sich handelt
switch(msg)
{
// wenn das Fenster geschlossen wird, eine Nachricht senden,
// die das Programm beendet
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_TIMER:
Move();
Render();
return 0;
break;
}
// Wenn wir uns nicht um die Nachricht gekümmert haben
// wird sie an die Standardnachrichtenverarbeitung von Windows
// geschickt
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int Render(void)
{
HDC hDC=GetDC(hWnd);
SetPixel(hDC, x, y, RGB(0,0,0));
ReleaseDC(hWnd,hDC);
return 0;
}
int Move(void)
{
HDC hDC=GetDC(hWnd);
RECT ClipRect;
GetClipBox(hDC, &ClipRect);
FillRect(hDC, &ClipRect, (HBRUSH)GetStockObject(WHITE_BRUSH));
ReleaseDC(hWnd,hDC);
return 0;
}
|
Wenn immer noch nicht verstanden, wie üblich, #jli-Channel...
Gruß
FH
<edit>
Das Problem müsste damit, wenn ich nichts falsch verstanden habe, gelöst sein. Probier den Code doch einmal.
In letzter Zeit ist immer jemand schneller als ich. *grummel*
</edit>
<edit 2000>
So, nachdem ca. 2000 mal Editieren Funktioniert der Code jetzt, auch von der Semantik her.
</edit2000> _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Zuletzt bearbeitet von FH am 25.12.2004, 22:57, insgesamt 4-mal bearbeitet |
|
Nach oben |
|
|
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 25.12.2004, 22:12 Titel: |
|
|
lol jo gerngeschehn!
@FH:
Sagte ich ihm auch schon aber er wills mir wohl nicht glauben |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 25.12.2004, 22:45 Titel: |
|
|
Ich benutz das schon ab und zu in Turbo Pascal wenn ich in einer Funktion einen Codeabschnitt habe den ich immer wieder brauche und es die Funktion unübersichtlich aussehen lässt... Pascal Code sieht schnell hässlich aus. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|