PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : legacy doom kompilieren - frage an die C-Fans


da.phreak
2008-03-21, 21:30:18
Wie der Titel sagt, ich möchte doom legacy (http://legacy.newdoom.com/) kompilieren (kompletter source hier (http://downloads.sourceforge.net/doomlegacy/legacy_142_src.tar.gz?modtime=1082246400&big_mirror=0))

Beim kompilieren kommen folgende Fehlermeldungen:

g_game.c: In function ‘G_ReadDemoTiccmd’:
g_game.c:2324: error: lvalue required as increment operand
g_game.c:2325: error: lvalue required as increment operand
g_game.c:2335: error: invalid type argument of ‘unary *’
g_game.c:2335: error: lvalue required as increment operand
g_game.c:2337: error: lvalue required as increment operand
g_game.c:2343: error: lvalue required as increment operand
g_game.c:2350: error: lvalue required as increment operand
g_game.c:2352: error: lvalue required as increment operand
make: *** [../objs/g_game.o] Error 1

Hier ein Beispielcodeblock. Die ersten beiden Zeilen sind Zeile 2324 und 2325, und verursachen Fehler. Die anderen beiden funktionieren:


cmd->forwardmove = READCHAR(demo_p);
cmd->sidemove = READCHAR(demo_p);
cmd->angleturn = READBYTE(demo_p)<<8;
cmd->buttons = READBYTE(demo_p);
cmd->aiming = 0;

Schein ein Problem mit neueren gcc-Versionen zu sein, habe zur Zeit Version 4.2.2 drauf.

Gast
2008-03-21, 21:33:19
Nimm 4.3.

da.phreak
2008-03-21, 21:55:09
Sicher? Soweit ich mich eingelesen habe, ist das ein Verhalten, das neuere gcc-Versionen nicht mehr tolerieren - es fehlt wie in der Fehlermeldung beschieben die lvalue. Wieso kapiere ich nur nicht ganz. Kann zwar programmieren, habe aber mit C noch nicht viel gemacht, das ist ziemlich undurchsichtig für mich.

Superguppy
2008-03-22, 12:03:51
Ich könnte mir vorstellen, dass bei cmd->sidemove das sidemove eine Stackvariable und kein Pointer ist. Zumindest hatte ich eine ähnliche Fehlermeldung erst beim Versuch, strtok() auf ein statisches Array schreiben zu lassen (geht nicht, weil strtok() Speicher allokiert).