Je débute, et j'ai un problème.

Fermé
geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 - 31 août 2007 à 20:33
Nicolas M. Messages postés 48 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 novembre 2010 - 14 oct. 2009 à 22:09
Bonsoir.
Voilà, je débute en programmation, parce que j'aime bien créer et chercher. Je suis des cours venant du site du zér0.
J'en suis à la leçon où il faut faire une fenêtre en dégradé. Mais j'ai un problème.
Je suis sous Code::Blocks.
Voici le code:

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>


void pause();
int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL, *lignes[256] = {NULL};
SDL_Rect position;
int i = 0;

SDL_Init(SDL_INIT_VIDEO);
ecran = SDL_SetVideoMode( 640, 256, 32, SDL_HWSURFACE | SDL_RESIZABLE);

for ( i = 0 ; i <= 255 ; i++)
lignes[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, 1, 32, 0, 0, 0, 0);

SDL_WM_SetCaption("Degrade avec la SDL", NULL);
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));

for (i = 0 ; i <= 255 ; i++)
{
position.x = 0;
position.y = i;
SDL_FillRect( lignes[i], NULL, SDL_MapRGB(ecran->format, i, i, i));
SDL_BlitSurface( lignes[i], NULL, ecran, &position);
}

SDL_Flip(ecran);
pause();

for ( i = 0 ; i <= 255 ; i++)
SDL_FreeSurface(lignes[i]);
SDL_Quit();

return 0;

}
void pause()
{
int continuer = 1;
SDL_Event event;

while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
}
}
}






Il n'y a pas d'erreur, mais quand je fais " Build and Run", rien ne se passe.
En bas j'obtiens ceci:
Project : SDL Application
Compiler : GNU GCC Compiler (called directly)
Directory : C:\Documents and Settings\****\Mes documents\****\DEV C++\PROJETS DEV C++\Fenetre en dégradé\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
Linking executable: sdlapp.exe
.objs\main.o:main.c:(.text+0x0): multiple definition of `SDL_main'
.objs\main.o:main.c:(.text+0x0): first defined here
.objs\main.o:main.c:(.text+0x248): multiple definition of `pause'
.objs\main.o:main.c:(.text+0x248): first defined here
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)


Comment puis-je résoudre le problème ? D'autant plus que le code est exactement le même que dans le cours.
Merci.

19 réponses

geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 6
31 août 2007 à 20:36
Parce que je crois qu'il faut créer un compte, et j'en ai pas, et j'ai pas envie d'en créer un. De plus, il a beacoup de monde fréquentant CCM.
0
Bonjour,

'pause' est une fonction qui existe déjà dans stdlib.h ou stdio.h.
Utilise simplement un autre nom de fontion.

Ajouter une majuscule devrait suffir : 'Pause'

Bonsoir !
0
geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 6
31 août 2007 à 20:38
D'accord, sinon je ne change rien d'autres ?
Merci de la réponse je vais essayer.

(faut dire quand dans le cours y'a pas de majuscule).
0
geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 6
31 août 2007 à 20:39
Nan, le problème est toujours le même.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,

1 - teste avec 'pauseMonTruc' ou quelquechose comme ca... on devrait jamais appeler une fonction 'pause' tout court.

2 - si ca marche pas, supprime le prototype de fonction en haut (void pause();) , et remonte ta fonction pause au dessus du main, ca pourrait fonctionner.
0
geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 6
31 août 2007 à 20:46
Je vais essayer.
0
geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 6
31 août 2007 à 20:50
J'obtiens ça à présent:
main.c:10: error: syntax error before '{' token
main.c:14: error: syntax error before "while"
main.c:28: error: parameter `i' is initialized
main.c:30: error: syntax error before "SDL_Init"
Process terminated with status 1 (0 minutes, 0 seconds)
4 errors, 0 warnings

0
geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 6
31 août 2007 à 21:03
L'installation SDL s'est bien passée puisque juste avant une fenetre en fond couleur simple avec un rectangle de couleur à l'intérieur fonctione.
"quel compilateur /version utilises-tu ? comment compiles-tu ? as-tu testé en ligne de commande ?"
Je suis vraiment désolé d'être aussi naze mais je ne sais pas où trouver ces infos.
0
Utilisateur anonyme
31 août 2007 à 20:35
Salut,

https://openclassrooms.com/fr/ ont un forum pourquoi ne pas demandé la bas ???
-1
Chez moi, ton code compile parfaitement (et fonctionne), tel que tu l'as posté en haut...
(avec "gcc -o test test.c -lSDL")

Etrange....

En plus, ce message la est vraiment bizarre :
.objs\main.o:main.c:(.text+0x0): multiple definition of `SDL_main'
.objs\main.o:main.c:(.text+0x0): first defined here

Il te dis que tu as la fonction SDL_main définie en double ! alors qu'il n'y en a pas définie dans ton code, et qu'il n'y a qu'un include...

Je te conseillerai donc simplement de vérifier / recommencer ton installation SDL.

PS : quel compilateur /version utilises-tu ? comment compiles-tu ? as-tu testé en ligne de commande ?
-1
ton compilateur est GCC !!! c'était marqué en plus ! lol
pour connaitre la version, tape "gcc -v" en console ; dernière ligne

Tu dois quand même savoir ou est ton fichier code... j'espère :)

Si c'est le cas, place toi dans le répertoire ou est ton fichier, dans une console.

Ensuite, tapes " gcc monFichierSource.c -o monExecutable -SDL"
en remplacant les noms biensur ! ca ve te créer ton prog.

Et ensuite (si c'est bien compilé), tu le lances : " ./monExecutable"

Si ca fonctionne, ton problème provient de ton interface de développement (Code::Blocks. d'après ce que j'ai compris).
-1
geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 6
31 août 2007 à 21:12
Je vais essayer sous DEVC++.
Sinon bah je ferais ce que tu m'as dis.
Merci de ton aide !!

Bonne fin de soirée.
(pour l'instant je laisse " non résolu".)
-1
geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 6
31 août 2007 à 21:19
Les choses que t'as dis ne fonctionnent pas, en plus je suis sous xp moi.
-1
Utilisateur anonyme
31 août 2007 à 21:23
1. T'est sur que c'est seulement ce code que tu ecrit ?
2. Tu ecrit tout ca et seulement ca dans main.c ?
3. C'est du C#, C ou C++ ?
4. Au debut, tu a pris "console" ou "fenetre" ?

J'en sais rien c'est juste pour aider Marc.
-1
geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 6
31 août 2007 à 21:31
Au début j'ai SDL Application. Dans les propriétés du projet, j'ai mis " Gui application".
Il n'y a que ça, il n'y a que main.c
C'est du C.
-1
geoff27007 Messages postés 675 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juillet 2008 6
1 sept. 2007 à 18:16
Un petit "up".
-1
Utilisateur anonyme
2 sept. 2007 à 02:09
T'a tenter sur le forum SDZ ?
0
J'ai le même problème, enfin pas sur un tuto du site du zero, bien que les ayant suivi par le passé ^^'
Je pense que le problème viens de codeblocks, je teste sous cygwin ^^'
-1
Salutations,

J'ai eu le même problème, en suivant apparemment les mêmes tutoriaux vu que les codes sources sont identique.
L'auteur utilise des exemples les uns à la suite des autres, et je les aient fait figurer dans le même projet. Si on les fait figurer dans des projets différents ou si on supprime le premier fichier source, l'erreur disparait.


Arktest
-1
Nicolas M. Messages postés 48 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 1 novembre 2010 113
14 oct. 2009 à 22:09
Fantome Hamster Jovial a dit :
"1. T'est sur que c'est seulement ce code que tu ecrit ?
2. Tu ecrit tout ca et seulement ca dans main.c ?
3. C'est du C#, C ou C++ ?
4. Au debut, tu a pris "console" ou "fenetre" ?
"

Si on parle d'un fichier main.c, il est impossible qu'il s'agisse du C++ qui donnerait main.cpp ou du C# qui donnerait main.cs...

Je crois qu'on est obligé d'utiliser SDL Application si on veut utiliser la SDL... C'est de la fenêtre mêlée à un peu de console, si je ne m'abuse... Mais bon, niveau SDL, il faudrait que je revoie mon code, j'ai les mêmes problèmes avec un bête code qui ouvre une fenêtre et qui y dessine un carré blanc sur fond bleu-vert... :'(
-1