Probleme de developpement c
Résolu/Fermé
A voir également:
- Doriane vient d’ouvrir un restaurant à lyon. en plus des actions menées sur son site web, elle souhaite développer la visibilité de son restaurant. pour cela, elle peut utiliser différentes techniques.
- Site de telechargement - Accueil - Outils
- Site pour vendre des objets d'occasion - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment restaurer un pc - Guide
- Site comme coco - Accueil - Réseaux sociaux
5 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
2 oct. 2021 à 12:29
2 oct. 2021 à 12:29
Bonjour,
Une information importante qui manque est : qu'est-ce qu'il y a lors de l'appel à
Une information importante qui manque est : qu'est-ce qu'il y a lors de l'appel à
InitSDL(&app)?
la structure est :
typedef struct Application
{
SDL_Window *window;
SDL_Renderer *renderer;
} Application *App;
L'appel de la fonction est:
App app;
InitSDL(app);
typedef struct Application
{
SDL_Window *window;
SDL_Renderer *renderer;
} Application *App;
L'appel de la fonction est:
App app;
InitSDL(app);
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
2 oct. 2021 à 20:37
2 oct. 2021 à 20:37
Appest un pointeur. Tu passes donc un pointeur non initialisé à ta fonction! Le compilateur a du s'étouffer! As-tu lu les warnings?
Le code devrait être:
struct Application app; InitSDL( &app );
ou à la rigueur:
App app = malloc( sizeof(*app) ); InitSDL( app );
Hey meci pour ta rapidité de reponse.
J'ai recodé mon programme plus proprement et appliqué ta technique.
Elle regle en effet le probleme mais en crée malhereusement un autre.
Maintenant mon code ressemble a ca :
fonction.c
main.c
ERROR:
error: storage size of 'app' isn't known
5 | struct App app
J'ai recodé mon programme plus proprement et appliqué ta technique.
Elle regle en effet le probleme mais en crée malhereusement un autre.
Maintenant mon code ressemble a ca :
fonction.c
void InitSDL(App app)
{
if (SDL_Init(SDL_INIT_VIDEO) != 0)
SDL_ExitWithError("impossible d'initialiser la bibliotheque SDL2");
printf("L'initialisation de la bibliotheque SDL2 est une reussite !\n");
app.window = NULL;
app.window = SDL_CreateWindow("SDL2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SDL_SCREEN_WIDTH, SDL_SCREEN_HEIGHT, 0);
if (app.window == NULL)
SDL_ExitWithError("impossible de generer la fenetre SDL2");
printf("La generation de la fenetre SDL2 est une resussite !\n");
app.renderer = NULL;
app.renderer = SDL_CreateRenderer(app.window, -1, SDL_RENDERER_SOFTWARE);
if (app.renderer == NULL)
{
SDL_DestroyWindow(app.window);
SDL_ExitWithError("impossible de generer le rendu SDL2");
}
printf("La generation du rendu SDL2 est une reussite !\n");
return;
}
main.c
int main(int argc, char **argv)
{
struct App app;
InitSDL(&app);
while (1)
{
SDL_prepareScene(&app);
SDL_doInput();
SDL_presentScene(&app);
SDL_Delay(16);
}
SDL_CleanApp(&app);
SDL_Quit();
return 1;
}
ERROR:
error: storage size of 'app' isn't known
5 | struct App app
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
Modifié le 5 oct. 2021 à 14:05
Modifié le 5 oct. 2021 à 14:05
Salut hadrien.costa-robert, et salut Dalfab :-)
Tu as ce message d'erreur car
Si je lis bien ce code complexe, celui-ci contient :
Cette dernière tentative ne fonctionne pas chez moi et donne ceci :
Rectifie ton type en :
Ensuite, dans ton main, déclare ta variable pointeur et initialise le. Tu dois initialiser la variable pointeur en lui affectant une adresse mémoire d'un stockage où les informations que tu veux y stocker pourront l'être.
quelque chose comme :
ou alors :
Vu que tu passes (dois passer) un pointeur sur
et le code dans ta fonction devrait accéder aux membres de la struct avec
Tu as ce message d'erreur car
struct Appn'est pas un type connu.
typedef struct Application { SDL_Window *window; SDL_Renderer *renderer; } Application *App;
Si je lis bien ce code complexe, celui-ci contient :
- une définition d'une struct dont l'étiquette est Application
- une définition d'un alias de type avec typedef indiquant que
struct Application
peut aussi être appelée Application - une tentative de déclaration d'un pointeur sur ce type avec une variable pointeur qui s'appelle App
Cette dernière tentative ne fonctionne pas chez moi et donne ceci :
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
} Application *App;
Rectifie ton type en :
typedef struct Application { SDL_Window *window; SDL_Renderer *renderer; } Application;
Ensuite, dans ton main, déclare ta variable pointeur et initialise le. Tu dois initialiser la variable pointeur en lui affectant une adresse mémoire d'un stockage où les informations que tu veux y stocker pourront l'être.
quelque chose comme :
int main(int argc, char **argv) { Application * App; App = malloc(sizeof(Application)); InitSDL(App); (...)
ou alors :
int main(int argc, char **argv) { Application App; InitSDL(&App); (...)
Vu que tu passes (dois passer) un pointeur sur
struct Application(ou un pointeur sur le type
Applicationqui est juste son alias), le prototype de ta fonction personnelle d'initialisation devrait être :
void InitSDL(Application * app)
et le code dans ta fonction devrait accéder aux membres de la struct avec
->et non pas
., puisque c'est un pointeur.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question