Bedankt! Wel, het lag er niet aan dat de variabelen dezelfde naam hadden, maar het bracht me wel op een idee. Ik heb de variabelen buiten het switch statement gedeclareerd en nu compileert het programma perfect.
Hier is de functie:
void DrawPixel ( SDL_Surface * screen, unsigned short x, unsigned short y, Uint8 r, Uint8 g, Uint8 b )
{
Uint32 color = SDL_MapRGB ( screen->format, r, g, b );
Uint8 * pixel_8;
Uint16 * pixel_16;
Uint32 * pixel_32;
switch ( screen->format->BytesPerPixel )
{
case 1:
pixel_8 = ( Uint8 * ) screen->pixels + y * screen->pitch + y;
* pixel_8 = color;
break;
case 2:
pixel_16 = ( Uint16 * ) screen->pixels + y * screen->pitch / 2 + y;
* pixel_16 = color;
break;
case 4:
pixel_32 = ( Uint32 * ) screen->pixels + y * screen->pitch + y;
* pixel_32 = color;
break;
}
}
(Als iemand van het hele programma - dat met SDL pixels in een venster tekent - de broncode wilt hebben, zeg het dan even hier.)
Voor de gene die zich afvragen waarom het op deze manier wel werkt; ik denk dat de compiler gewoon niet kan voorspellen voor welke variabel hij geheugen moet reserveren aan het begin van het programma, en daarom een foutmelding geeft. Een workaround zou met de malloc() en free() (C) functies of met de new en delete operators (C++) bereikt kunnen worden.