IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Error : expected unqualified-id before string constant [SDL 2.0]


Sujet :

SDL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Error : expected unqualified-id before string constant
    Salut tout le monde !
    Je reviens vers vous car je suis bloqué dans la compilation de l'un de mes programmes. Tout d'abord je suis en ce moment le cours de Rémy Malgouyres sur OpenGL ici. Si vous connaissez ce cours j'aimerais
    beaucoup avoir votre avis sur celui-ci ou si vous avez d'autre suggestion de cours OpenGL.
    Bref, dans le premier chapitre on créer un "squelette" pour afficher, récupérer des événements, initialiser SDL etc... Mais arriver à la classe EventController g++ m'affiche ce message d'erreur " Error : expected unqualified-id before string constant extern "C" ". Sachant que cette ligne appartient au fichier SDL_platform.h et qu'elle permet (de ce que j'ai compris) d'utiliser des fonctions en C malgré qu'on soit en C++.

    Voici EventCont.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    #include <stdlib.h>
    #include <stdio.h>
    #include "MouseData.h"
    #include "Wrapper.h"
    #include "Model.h"
     
    SDL_TimerID Wrapper::EventCont::mTimerID;
     
    void Wrapper::EventCont::Init(SDL_Window* window, Model* p_mod){
    	mTimerID = SDL_AddTimer(20, CreateTimerRefresh, (void*)p_mod);
    	EventCont::EventsLoop(window, p_mod);
    }
     
    void Wrapper::EventCont::EventsLoop(SDL_Window* window, Model* p_mod){
    	bool fin = false;
    	SDL_Event evet;
     
    	while(!fin){
    		while(SDL_PollEvent(&evet)){
    			fin = Handle_SDL_Event(&evet, window, p_mod);
    		}
    	}
    }
     
    Uint32 Wrapper::EventCont::CreateTimerRefresh(Uint32 interval, void* p_mod){
    	SDL_UserEvent userevent;
    	userevent.type = SDL_USEREVENT;
    	userevent.code = UserEventKind::ANIMATION_TIMER;
    	userevent.data1 = (void*)p_mod;
    	userevent.data2 = nullptr;
     
    	SDL_Event evet;
    	evet.type = SDL_USEREVENT;
    	evet.user = userevent;
    	SDL_PushEvent(&evet);
     
    	return interval;
    }
     
    bool Wrapper::EventCont::Handle_SDL_Event(const SDL_Event* p_evet, SDL_Window* p_window, Model* p_mod){
    	switch(p_evet->type){
    		case SDL_MOUSEBUTTONDOWN:
    			switch(p_evet->button.button){
    				case SDL_BUTTON_LEFT:
    					MouseData::leftButtonPressed = true;
    					MouseData::mousex = p_evet->button.x;
    					MouseData::mousey = p_evet->button.y;
    					break;
    				default:
    					break;
    			}
    			break;
    		case SDL_MOUSEBUTTONUP:
    			switch(p_evet->button.button){
    				case SDL_BUTTON_LEFT:
    					MouseData::leftButtonPressed = false;
    					break;
    				default:
    					break;
    			}
    			break;
    		case SDL_MOUSEMOTION:
    			if(MouseData::leftButtonPressed){
    				p_mod->upMouseMo(p_evet->motion.x - MouseData::mousex, 
    								p_evet->motion.y - MouseData::mousey);
    				MouseData::mousex = p_evet->button.x;
    				MouseData::mousey = p_evet->button.y;
    			}
    			break;
    		case SDL_USEREVENT:
    			if(p_evet->user.code == UserEventKind::ANIMATION_TIMER){
    				p_mod->update();
    				SDL_GL_SwapWindow(p_window);
    			}
    			break;
    		case SDL_WINDOWEVENT:
    			int w, h;
    			SDL_GetWindowSize(p_window, &w, &h);
    			p_mod->Redimentionner(w, h);
    			break;
    		case SDL_QUIT:
    			return true;
    			break;
    		default:
    			break;
    	}
     
    	return false;
    }

    ensuite la déclaration de la classe EventCont se fait dans Wrapper.h car c'est une classe imbriqué à la classe Wrapper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #ifndef WRAPPER_H
    #define WRAPPER_H
     
    #include "SDL2/SDL.h"
    #include "Model.h"
     
    class Wrapper{
     
    public:
    	Wrapper(int largeurFeInit, int hauteurFeInit, const char* titre, int argc, char**argv);
    	~Wrapper() = default;
    	static int getTicks();
     
    private:
     
    	class WindowManager{
     
    	public:
    		WindowManager(int largeurFeInit, int hauteurFeInit, const char** titre);
    		~WindowManager();
    		SDL_Window* const getP_Window();
     
    	private:
    		SDL_Window* mP_Window;
    		SDL_GLContext* mP_Context;
    		static SDL_Window* init_SDL_Window(int windwoWidth, int windwoHeigth, const char** titre);
     
    		WindowManager(const &WindowManager) = delete;
    		WindowManager & operator = (const WindowManager&) = delete;
    	};
     
    	class EventCont{
     
    	public:
    		static void Init(SDL_Window* window, Model* p_mod);
     
    	private:
    		enum UserEventKind{
    			ANIMATION_TIMER = 0
    		};
     
    		static bool Handle_SDL_Event(const SDL_Event* p_evet, SDL_Window* p_window, Model* p_mod);
    		static void EventsLoop(SDL_Window* window, Model* p_mod);
    		static Uint32 CreateTimerRefresh(Uint32 interval, void* p_mod);
     
    		static SDL_TimerID mTimerID;
    	};
     
    	WindowManager mWindowManager;
    	Model mModel;
    };
     
    #endif //WRAPPER_H
    Merci d'avance pour votre aide !

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pour d'autres "cours" vous avez cette page des tutoriels disponibles sur Developpez.com : https://opengl.developpez.com/tutoriels/
    Ma crainte est que les cours de Remy Malgouyres (c'était un de mes profs d'ailleurs) utilisent OpenGL 1 (ou 2.1) mais pas OpenGL 3 (ou autrement nommé, OpenGL moderne).

    Pour l'erreur que vous indiquez, le problème c'est que vous ne donnez pas la ligne provoquant l'erreur. Donc dur pour nous de savoir ce dont il en retourne.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Merci pour votre réponse. J'ai résolu mon problème en changeant l'ordre des fichiers à compiler ce qui ma permis de régler les problèmes des autres fichiers avant.

    Pour ce qui est du cours :
    Au début du cours il dit utiliser OpenGL 3.0, mais je ne sais pas où j'ai entendu ça mais je crois que l'utilisation de glBegin() et glEnd() signifie que l'on ne fais pas d'OpenGL moderne (je me trompe peut-être).
    En plus j'ai vu qu'il travail à l'Université d'Auvergne (si c'est toujours d'actualité) donc si j'ai besoin de lui poser une question sur son cours j'irais le voir directement ^^

  4. #4
    Membre éprouvé
    Avatar de Garvelienn
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2016
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 244
    Points : 993
    Points
    993
    Par défaut
    Citation Envoyé par Vinkkk Voir le message
    Pour ce qui est du cours :
    Au début du cours il dit utiliser OpenGL 3.0, mais je ne sais pas où j'ai entendu ça mais je crois que l'utilisation de glBegin() et glEnd() signifie que l'on ne fais pas d'OpenGL moderne (je me trompe peut-être).
    En plus j'ai vu qu'il travail à l'Université d'Auvergne (si c'est toujours d'actualité) donc si j'ai besoin de lui poser une question sur son cours j'irais le voir directement ^^
    En effet, ce sont des fonctions des anciennes versions d'OpenGL.

    Si vous cherchez des tutoriels plus à la page, je vous invite à lire les versions françaises des excellents tutoriels anglophones du site Learn OpenGL : https://opengl.developpez.com/tutori...rendre-opengl/

    Ces tutoriels sont idéales pour débuter avec OpenGL Modern.
    «Le management, tel qu’on l’apprend dans les écoles et tel qu’on l’applique ensuite, sous prétexte de «motivation du personnel», organise exactement le contraire, à savoir la démotivation organisée.» - Bernard Stiegler

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci pour les liens !
    Je voulais savoir si c'était intéressant de commencer par du openGL dit "classique" pour ensuite enchaîner sur openGL moderne ? Y a-t-il beaucoup de différence entre les deux versions d'openGL ?

  6. #6
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Oui , il y a beaucoup de différence et OpenGL 1 n'a que peut d’intérêt vraiment avec le temps , je la trouve assez médiocre en faite

  7. #7
    Membre éprouvé
    Avatar de Garvelienn
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2016
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 244
    Points : 993
    Points
    993
    Par défaut
    @Vinkkk

    Tout dépend ce que vous recherchez. Il est vrai qu'OpenGL 1 et 2 sont un peu obsolètes (quoi que). Mais ces versions sont plus simples à appréhender. OpenGL 3 est plus permissif et surtout plus bas-niveau donc plus compliqué. Cela permet d'avoir des programmes plus optimisés et légers si le développeur fait bien son travail. Cela étant également les possibilités.

    OpenGL 3 n'est pas disponible sur les vieux périphériques.

    Donc à voir avec votre besoin. Si vous souhaitez apprendre pour le plaisir ou vous former pour un usage futur professionnel, je vous conseille comme Kannagi, OpenGL Modern.

    Personnellement, donc avec un avis subjectif, je préfère OpenGL Modern (3 et 4). C'est nettement plus rigolo car vous pouvez bidouiller et trifouiller beaucoup plus (et donc casser encore plus de choses).
    «Le management, tel qu’on l’apprend dans les écoles et tel qu’on l’applique ensuite, sous prétexte de «motivation du personnel», organise exactement le contraire, à savoir la démotivation organisée.» - Bernard Stiegler

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses.
    Je vais commencer à apprendre OpenGL classique pour avoir des résultats plus rapidement pour ne pas me décourager mais je passerais je pense très vite à OpenGL moderne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2011, 11h25
  2. expected unqualified id before 'namespace
    Par phapha2011 dans le forum Débuter
    Réponses: 16
    Dernier message: 28/10/2011, 17h32
  3. erreur : expected unqualified-id before '+' token
    Par issmaz dans le forum Débuter
    Réponses: 3
    Dernier message: 27/10/2011, 10h21
  4. Réponses: 4
    Dernier message: 14/04/2010, 09h42
  5. expected unqualified-id before ‘namespace’
    Par ikuzar dans le forum Débuter
    Réponses: 1
    Dernier message: 16/05/2009, 12h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo