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

Boost C++ Discussion :

[asio] erreur de syntaxe,spécificateur de type manquant et d autre


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Par défaut [asio] erreur de syntaxe,spécificateur de type manquant et d autre
    Bonjour,

    j ai télécharger le code source sur ce site :

    http://khayyam.developpez.com/articl.../architecture/

    j ai voulu tester de le compiler et voir comment ca fonctionne et je me suis retrouver avec plusieurs soucie, en particulier avec asio.

    par exemple sur ces fichier console.h et console.cpp que je vous met ici :

    console.cpp
    Code cpp : 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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    #include "console.h"
    #include <RendererModules/IrrlichtRenderer/irrlichtrenderer.h>
    #include <iostream>
    #include <vector>
    #include <sstream>
    #include <windows.h>
     
    console::console(){
    	idevice = irr::createDevice(irr::video::EDT_OPENGL, irr::core::dimension2d<irr::s32>(800, 600), 32, false, false, false);
    	driver = idevice->getVideoDriver();
    	idevice->getCursorControl()->setVisible(false);
    	running = true;
    	c = NULL;
     
    	CEGUI::IrrlichtRenderer *myRenderer = new CEGUI::IrrlichtRenderer(idevice);
    	new CEGUI::System(myRenderer);
     
    	CEGUI::SchemeManager::getSingleton().loadScheme("./data/gui/schemes/TaharezLook.scheme");
    	CEGUI::FontManager::getSingleton().createFont("./data/gui/fonts/Commonwealth-10.font");
    	CEGUI::System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow");
     
    	idevice->setEventReceiver(this);
     
    	display();
    }
     
    console::~console(){
    	if (c)
    		delete c;
    }
     
    bool console::OnEvent(irr::SEvent e){
    	if (!idevice)
    		return false;
     
    	switch (e.EventType){
    		case irr::EET_MOUSE_INPUT_EVENT:
    			// inject mouse position
    			CEGUI::System::getSingleton().injectMousePosition((float)e.MouseInput.X, (float)e.MouseInput.Y);
    			// inject mouse clic
    			switch (e.MouseInput.Event){
    				case irr::EMIE_LMOUSE_PRESSED_DOWN : 
    					CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::LeftButton);
    					break;
    				case irr::EMIE_LMOUSE_LEFT_UP : 
    					CEGUI::System::getSingleton().injectMouseButtonUp(CEGUI::LeftButton);
    					break;
    				case irr::EMIE_MOUSE_WHEEL :
    					CEGUI::System::getSingleton().injectMouseWheelChange(e.MouseInput.Wheel);
    					break;
    				default:
    					break;			
    			}			
    			return true;
    		case irr::EET_KEY_INPUT_EVENT:		
    			if (e.KeyInput.PressedDown){
    				// inject all the special keys
    				switch(e.KeyInput.Key){
    					case irr::KEY_RETURN:	CEGUI::System::getSingleton().injectKeyDown(CEGUI::Key::Return);	break;
    					case irr::KEY_BACK:		CEGUI::System::getSingleton().injectKeyDown(CEGUI::Key::Backspace);	break;
    					case irr::KEY_TAB:		CEGUI::System::getSingleton().injectKeyDown(CEGUI::Key::Tab);	break;
    					default:
    						CEGUI::System::getSingleton().injectChar(e.KeyInput.Char);
    						break;
    				}									
    			}
    			break;	
    		default:
    			return false;
    	}
     
    	return false;
    }
     
    void console::display(){
    	CEGUI::WindowManager& winMgr = CEGUI::WindowManager::getSingleton ();
    	winMgr.destroyAllWindows();
    	CEGUI::Window* background = winMgr.createWindow("TaharezLook/StaticImage");
     
    	background->setProperty ("Image", "set:BackgroundImage image:full_image");
    	background->setProperty ("FrameEnabled", "false");
        background->setProperty ("BackgroundEnabled", "false");
     
    	background->addChildWindow (winMgr.loadWindowLayout ("./data/gui/layouts/screen.layout", "root/"));
     
    	CEGUI::WindowManager::getSingleton().getWindow("root/b_ok")->
    		subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&console::handle_ok, this));
     
    	CEGUI::System::getSingleton ().setGUISheet (background);
    }
     
    void console::process(){
    	CEGUI::Editbox *eb = static_cast<CEGUI::Editbox*>(CEGUI::WindowManager::getSingleton().getWindow("root/input"));
    	std::string str = std::string(eb->getText().c_str());
    	eb->setText("");
     
    	add_msg_output(std::string(">>")+str);
     
    	if (str == "")
    		return;
     
    	// check if "quit"
    	if (str == "quit"){
    		running = false;
    		return;
    	}
     
    	// let's explode the string
    	std::istringstream iss(str);
    	std::vector<std::string> command_line;
    	std::string temp;
    	while (std::getline(iss, temp, ' ')){
    		command_line.push_back(temp);
    	}
     
    	// check if "connect"
    	if (command_line[0] == "connect"){
    		if (command_line.size() < 5){
    			std::string msg = "Too few arguments : connect [host] [port] [login] [pass]";
    			add_msg_output(msg);
    			return;
    		}else{
    			// extract the port number
    			std::istringstream s(command_line[2]);
    			int port;
    			s >> port;
     
    			if (c)
    				delete c;
     
    			try{
    				c = new connection(this, command_line[1], port, command_line[3], command_line[4]);
    			}catch(std::string& e){
    				if (e == "delete me")
    					if (c){delete c; c = NULL;}
    			}catch(std::exception &e){
    				add_msg_output(std::string(e.what()));
    				if (c){delete c; c = NULL;}
    			}catch(...){
    				add_msg_output(std::string("Erreur"));
    				if (c){delete c; c = NULL;}			
    			}
    		}
    		return;
    	}
     
    	// else, send to the server
    	if (c)
    		std::string out = c->send(str);
    	else 
    		add_msg_output(std::string("connect first"));
    }
     
    void console::run(){
    	asio::deadline_timer timer(io, boost::posix_time::seconds(0));
     
    	while (running && driver && idevice->run()){
    		driver->beginScene(true, true, irr::video::SColor(0,100,100,100));
    		CEGUI::System::getSingleton().renderGUI();
    		driver->endScene();	
     
    		timer.expires_at(timer.expires_at() + boost::posix_time::millisec(10));
    		timer.wait();
    	}
    }
     
    void console::add_msg_output(std::string& s){
    	CEGUI::MultiColumnList *m = static_cast<CEGUI::MultiColumnList*>(CEGUI::WindowManager::getSingleton().getWindow("root/output"));
    	CEGUI::String current = m->getText();
     
    	current.append(s);
    	current.append("\n");
     
    	m->setText(current);
    }


    console.h
    Code cpp : 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
    #ifndef H__console__
    #define H__console__
     
    #include <irrlicht.h>
    #include <CEGUI.h>
    #include <string>
    #include "connection.h"
     
    class console : public irr::IEventReceiver{
    public:
    	console();
    	~console();
    	void run();
     
    	bool OnEvent(irr::SEvent);
    	bool handle_ok(const CEGUI::EventArgs&)	{process();	return true;}
     
    	void add_msg_output(std::string&);
     
    	asio::io_service io;
    private:
    	void display();
    	void process();
     
    	irr::video::IVideoDriver *driver;
    	CEGUI::System *sys;
    	irr::IrrlichtDevice *idevice;
     
    	bool running;
     
    	connection *c;
    };
     
    #endif

    dans la logique ce code venant d un tuto du site devrais etre fonctionnelle (je veux dire sans erreur) il est dit que ca compile bien.

    mais moi j ai toutes ces petite erreur (de syntaxe, ou identificateur non déclaré ou encore spécificateur de type manquant...

    je ne comprend pas pourquoi, je vous montre les erreurs que j ai en sortie.


    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
    remote-console\src\console.h(20) : error C2653: 'asio'*: n'est pas un nom de classe ni d'espace de noms
    remote-console\src\console.h(20) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'io'
    remote-console\src\console.h(20) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    remote-console\src\console.h(20) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    console.cpp
    remote-console\src\connection.h(18) : error C2653: 'asio'*: n'est pas un nom de classe ni d'espace de noms
    remote-console\src\connection.h(18) : error C2143: erreur de syntaxe*: absence de ';' avant '*'
    remote-console\src\connection.h(18) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    remote-console\src\connection.h(18) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    remote-console\src\console.h(20) : error C2653: 'asio'*: n'est pas un nom de classe ni d'espace de noms
    remote-console\src\console.h(20) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'io'
    remote-console\src\console.h(20) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    remote-console\src\console.h(20) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    .\src\console.cpp(155) : error C2653: 'asio'*: n'est pas un nom de classe ni d'espace de noms
    .\src\console.cpp(155) : error C2065: 'deadline_timer'*: identificateur non déclaré
    .\src\console.cpp(155) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'timer'
    .\src\console.cpp(155) : error C2065: 'io'*: identificateur non déclaré
    .\src\console.cpp(155) : error C3861: 'timer'*: identificateur introuvable
    .\src\console.cpp(162) : error C2065: 'timer'*: identificateur non déclaré
    .\src\console.cpp(162) : error C2228: la partie gauche de '.expires_at' doit avoir un class/struct/union
            le type est ''unknown-type''
    .\src\console.cpp(162) : error C2065: 'timer'*: identificateur non déclaré
    .\src\console.cpp(162) : error C2228: la partie gauche de '.expires_at' doit avoir un class/struct/union
            le type est ''unknown-type''
    .\src\console.cpp(163) : error C2065: 'timer'*: identificateur non déclaré
    .\src\console.cpp(163) : error C2228: la partie gauche de '.wait' doit avoir un class/struct/union
            le type est ''unknown-type''
    J aimerais bien comprendre pourquoi, aurais je oublier quelque chose ou c est tout simplement le code qui vas pas ?


    Pour info je compile avec "Microsoft Visual C++ 2008 Express Édition", et je débute, je vous remercie pour votre compréhension, si vous pouviez m expliquer le plus simplement car les mot technique je suis pas bien familiariser avec.

    Merci pour votre aide

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Peux-tu ne nous donner QUE les lignes concernées ?

    Mais à mon avis, tu n'as pas (bien) installé Boost.Asio.

    Tu as installé boost comment ? Quelle version ? (Asio n'est comprise dans boost que depuis la 1.35, il faut l'installer séparément pour les versions précédentes)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Par défaut
    comme demander je met que les lignes d erreur concerner.

    console.h
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    asio::io_service io;

    et les erreurs pour cette ligne :

    Citation Envoyé par sortie
    console.h(20) : error C2653: 'asio'*: n'est pas un nom de classe ni d'espace de noms
    console.h(20) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'io'
    console.h(20) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    console.h(20) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    console.cpp
    console.h(20) : error C2653: 'asio'*: n'est pas un nom de classe ni d'espace de noms
    console.h(20) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'io'
    console.h(20) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    console.h(20) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    Pour le console.cpp
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    asio::deadline_timer timer(io, boost::posix_time::seconds(0));
    		timer.expires_at(timer.expires_at() + boost::posix_time::millisec(10));
    		timer.wait();

    et les erreurs des cet lignes :

    Citation Envoyé par sortie
    console.cpp(155) : error C2653: 'asio'*: n'est pas un nom de classe ni d'espace de noms
    console.cpp(155) : error C2065: 'deadline_timer'*: identificateur non déclaré
    console.cpp(155) : error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'timer'
    console.cpp(155) : error C2065: 'io'*: identificateur non déclaré
    console.cpp(155) : error C3861: 'timer'*: identificateur introuvable
    console.cpp(162) : error C2065: 'timer'*: identificateur non déclaré
    console.cpp(162) : error C2228: la partie gauche de '.expires_at' doit avoir un class/struct/union le type est ''unknown-type''
    console.cpp(162) : error C2065: 'timer'*: identificateur non déclaré
    console.cpp(162) : error C2228: la partie gauche de '.expires_at' doit avoir un class/struct/union le type est ''unknown-type''
    console.cpp(163) : error C2065: 'timer'*: identificateur non déclaré
    console.cpp(163) : error C2228: la partie gauche de '.wait' doit avoir un class/struct/union le type est ''unknown-type''

    Citation Envoyé par Alp
    Quelle version as tu installé ?
    j ai installer la version 1.35 de boost, mais j ai aussi instaler la version 1.0.0 de asio en écrasant asio existant (je pense pas que cela soit ca les version doivent être identique).

    Citation Envoyé par Alp
    Tu as installé boost comment ?
    j ai pris le .exe de boost 1.35 et j ai instaler le dossier dans "C:\Program Files\Microsoft Visual Studio 9.0\boost_1_35_0"

    ensuite j ai dit au compilateur d aller chercher le dossier en passant par outil/option/ :projets et solution:répertoire de VC++
    j ai mis dans le répertoire include le dossier ou est situer boost
    et dans bibliothèque la lib du dossier boost (toute les librairie été compiler dans le .exe)

    voila en gros comment j ai installer ça, aurais oublier quelque chose ?

    Merci encore pour votre aide.

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    A mon avis, tu devrais :
    - désinstaller boost
    - supprimer tout ce qui reste (l'installation de asio 1.0 que tu as faite à la main par ex)
    - réinstaller boost et ne pas installer une autre version d'asio que celle qui est fournie

    Et en re-configurant les dossiers d'include/lib de VC++, réessayer de compiler ton projet.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Par défaut
    j ai suivie ton conseil, j ai tout désinstaller et réinstaller boost 1.35.0.

    j ai essayer de compiler et j ai une erreur qui vient de leur fichier hpp :

    Citation Envoyé par sortie
    C:\Program Files\boost\boost_1_35_0\boost/asio/detail/socket_types.hpp(27) : fatal error C1189: #error : WinSock.h has already been included
    Si je fait "générer la solution" j obtiens toujours les mêmes erreurs que précédemment. y aurais t il d autre chose a ajouter dans le VC++ pour la configuration ?

    l osque je génère le projet il me dit que mon projet est obsolète, sa veux dire quoi ? que le code est de l ancien temps .

    j ai du mal a comprendre, il y a pas une version de compilateur a paramétrer (je pense comme en java j ai du mettre "compiler en version 6" car en 5 çà fonctionner pas) je me dit que c est peux être pareil avec les compilateur c++ non ? si c est le cas je c est pas ou c est.

    Merci encore pour ton aide Alp

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    A mon avis, asio se trouve maintenant dans l'espace de nom boost. Donc using namespace boost::asio si tu prends un using, sinon tu préfixes tout par boost::.

Discussions similaires

  1. Spécificateur de type manquant + erreur de syntaxe
    Par JackJnr dans le forum Débuter
    Réponses: 4
    Dernier message: 10/10/2013, 10h27
  2. Réponses: 0
    Dernier message: 17/09/2010, 10h47
  3. Réponses: 8
    Dernier message: 01/08/2009, 16h31
  4. Réponses: 1
    Dernier message: 12/05/2009, 09h43
  5. Réponses: 4
    Dernier message: 04/03/2003, 01h05

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