[Linker Error] undefined reference to 'winmain@16'
lima-city → Forum → Programmiersprachen → C/C++ und D
after
bad
code
compiler
file
first
gelegenheit
header
kleine anmerkung
konsole
message
not
point
sagen
same
sense
solution
standard
tun
vorgabe
-
Hello Guys,
I've just started programming C with Dev-C++ and am just trying to program a kind of role play (only fighting, nothing very good)
I had to create some Librarys and stuff and because of the possibility to have the same Library in the code, I used
#ifndef
and
#define
and after the Main function, I ended with
#endif
this is the whole code:
#include <stdio.h> #include <Character.h> #include <stdlib.h> #include <Inventory.h> #ifndef Character_h_INCLUDED #define Character_h_INCLUDED #ifndef Inventory_h_INCLUDED #define Inventory_h_INCLUDED #ifndef stdlib_h_INCLUDED #define stdlib_h_INCLUDED #ifndef stdio_h_INCLUDED #define stdio_h_INCLUDED int main() { Health=15; Armor=1; Attack=Sword; Agility=8; Constitution=10; Strength=11; Inventory = Sword&&Gold2; printf("gotcha\n"); system("PAUSE"); return 0; } #endif #endif #endif #endif
So, after compiling, it says:
[Linker Error] undefined reference to 'WinMain@16'
I tried some things and came to the solution, that #endif can't be after the main function,
but it also cannot be in the main function,
so I guess, that I have to put #endif somewhere else, but where?
before the main function doesn't make sense, because then, I could leave that out as well.
Can anyone help me with this?
Greets,
Infinitysounds
PS: Of course I searched the FAQ and the Forums but I didn't find a solution.
PPS: Sorry, dass es auf Englisch ist.
Beitrag zuletzt geändert: 29.4.2011 21:41:11 von infinitysounds -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hello infinitysounds,
at first: it doesn't make any sense to put header guards into modules (*.c or *.cpp files).
It looks like you are programming in C, so I'll give you a header template:
/* replace HEADERNAME by the real filename: */ #ifndef _HEADERNAME_H_ #define _HEADERNAME_H_ /* put includes needed by the function declarations here */ /* guard for c++ compilers */ #ifdef __cplusplus extern "C" { #endif /* typdefs, macros, function declarations... */ #ifdef __cplusplus } #endif #endif
It is important, that the *.h file only contains the function declarations (except you declare them static). The function definitions have to be in the corresponding *.c file.
The next point is the error message: undefined reference to 'WinMain@16'.
That means the linker is searching for the function
as the program's entry point but you have justint CALLBACK WinMain( __in HINSTANCE hInstance, __in HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nCmdShow );
That means, your compiler/linker is thinking you are writing a Windows program (with GUI) instead of a normal c-console application. You have two choices now: Tell your compiler that it is a console program (or change the entry point) so it will use int main() or use the standard WinMain() function. But if you use WinMain() you can not print easily to the console window!int main()
PS: Excuse my bad English.
Beitrag zuletzt geändert: 29.4.2011 22:23:29 von darkpandemic -
Ich habe bereits versucht, die console Application einzuschalten, aber das hat nichts gebracht, also werde ich bei gelegenheit an der Stelle jene verändeung vornehmen.
Ich hoffe, dass wenn jemand noch eine andere Idee hat, dass er es mir dann sagt, wenn ich die lösung habe, sage ich es.
PS: ich kann deutsch, aber ich hatte diese Anfrage auf sourceforge verschickt und hatte gedacht, dass hier eh alle gut genug englisch können, um das zu verstehen, also dachte ich ich brauche es nicht übersetzen. -
Hallo infinitysounds,
ich weis ja, dass Du deutsch kannst.
Hast Du schonmal versucht alles auszukommentieren und nur ein normales Hello-World-Programm reinzuschreiben:
Evtl. kannst Du ja auch mal Versuchen ein neues Projekt zu machen (diesmal mit Konsole als Vorgabe) und alles reinzukopieren.#include <stdio.h> int main() { printf("Hello world!"); return 0; }
Edit: Kleine Anmerkung am Rande: Sword&&Gold2 ist wahrscheinlich 0 oder etwas was Du eigentlich nicht haben willst. (hat nichts mit dem Thema zu tun)
Beitrag zuletzt geändert: 29.4.2011 22:54:59 von darkpandemic -
Hallo Welt war mein erstes Programm und das zweite hab ich schon tausendmal versucht, trotzdem danke.
Das andere werde ich sehen, wenn es funktioniert...
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage