Zaczołem naukę C++ i utknołem na jednym problemie. Otóż przy linkowaniu aplikacja wywala błąd:
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
1>C:\Documents and Settings\SysOp\Moje dokumenty\Visual Studio 2008\Projects\Okienka\Debug\Okienka.exe : fatal error LNK1120: 1 unresolved externals
Niewłaściwy projekt - zamiast Windows Application powinieneś wybrać Console Application by używać main. Ew. zmień punkt wejścia z main na WinMain(który to jest bardziej domyślny dla aplikacji okienkowych w Windows).
c:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\okienka\okienka\main.cpp(9) : warning C4007: 'WinMain' : must be '__stdcall'
1>c:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\okienka\okienka\main.cpp(9) : error C2731: 'WinMain' : function cannot be overloaded
1> c:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\okienka\okienka\main.cpp(8) : see declaration of 'WinMain'
Źródło:
#include
#define WIN32_LEAN_AND_MEAN
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow);
#define WINAPI __stdcall
void WinMain()
{
if (UINT uDecyzja = MessageBox(NULL, "Glosowanko?",
"Głosowanie", MB_YESNO | MB_ICONQUESTION))
{
switch (uDecyzja)
{
case IDYES:
// odpowiedź pozytywna
break;
case IDNO:
// odpowiedź negatywna
break;
}
}
}
Mógłbym prosić o gotowy kod(taki ktory mozna skompilowac edytujac ten)?
A poszukać to nie łaska? WinMain ma taki proptoryp, a nie void WinMain();, do tego tej funkcji nie wolno przeładowywać. Makro WINAPI jest definiowane przez windows.h, nie trzeba redefiniować. Aby WIN32_LEAN_AND_MEAN “działało” musi być zdefiniowane przed dołączeniem windows.h
#define WIN32_LEAN_AND_MEAN
#include
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
UINT uDecyzja = MessageBox(NULL, "Glosowanko?",
"Głosowanie", MB_YESNO | MB_ICONQUESTION);
switch (uDecyzja)
{
case IDYES:
// odpowiedź pozytywna
break;
case IDNO:
// odpowiedź negatywna
break;
}
}
C++ pozwala na definiowanie zmiennych w obrębie warunku? VC++ 2010 przepuszcza, ale co o tym standard mówi?