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

C++ Discussion :

[Compilation] erreur sous gcc, pas sur Visual


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut [Compilation] erreur sous gcc, pas sur Visual
    Bonjour � tous,

    Afin d'effectuer un portage sous Linux, j'essaye actuellement de compiler mon projet avec gcc 4.3.2 sous Ubuntu 8.10.
    J'ai une erreur que je ne comprend pas...
    Citation Envoy� par gcc
    /tcp_connection.h:59: erreur: expected primary-expression before �,� token
    Je pense que c'est un probl�me de typename, mais l� j'avoue ne pas trop savoir comment m'en sortir.

    J'ai fourni un exemple complet minimal pour ceux qui voudrait le compiler, i.e. un petit main et le .h correspondant. Il y a un petit //ERREUR ICI pour signaler la ligne qui pose probl�me !

    tcp_connection.h
    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    #ifndef CONNECTION_H
    #define CONNECTION_H
     
    #include <boost/asio.hpp>
    #include <boost/archive/binary_iarchive.hpp>
    #include <boost/archive/binary_oarchive.hpp>
    #include <boost/archive/text_iarchive.hpp>
    #include <boost/archive/text_oarchive.hpp>
    #include <boost/bind.hpp>
    #include <boost/shared_ptr.hpp>
    #include <boost/tuple/tuple.hpp>
    #include <iomanip>
    #include <string>
    #include <sstream>
    #include <vector>
     
    struct ModeBase
    {
    	enum {
    		TEXT_MODE = 0,
    		BINARY_MODE = 1,
    	};
    };
     
    template<int>
    struct Archive
    {
    	typedef boost::archive::text_iarchive i_archive;
    	typedef boost::archive::text_oarchive o_archive;
    };
     
    template<>
    struct Archive<ModeBase::BINARY_MODE>
    {
    	typedef boost::archive::binary_iarchive i_archive;
    	typedef boost::archive::binary_oarchive o_archive;
    };
     
    template <int Mode = ModeBase::TEXT_MODE >
    class tcp_connection
    {
    public:
    	typedef boost::shared_ptr<tcp_connection<Mode> >	pointer;
    	typedef boost::weak_ptr<tcp_connection<Mode> >		w_pointer;
     
    	static pointer create (boost::asio::io_service& io_service)
    	{
    		return pointer(new tcp_connection<Mode>(io_service));
    	}
     
    	template <typename T, typename Handler>
    	void async_read(T& t, Handler handler)
    	{
    		void (tcp_connection<Mode>::*f)(
    			const boost::system::error_code&,
    			T&, boost::tuple<Handler>)  // ERREUR ICI
    			= &tcp_connection<Mode>::handle_read_header<T, Handler>;
     
    		boost::asio::async_read(m_socket, boost::asio::buffer(m_inbound_header),
    			boost::bind(f,
    			this, boost::asio::placeholders::error, boost::ref(t),
    			boost::make_tuple(handler)));
    	}
     
    	/// Handle a completed read of a message header. The handler is passed using
    	/// a tuple since boost::bind seems to have trouble binding a function object
    	/// created using boost::bind as a parameter.
    	template <typename T, typename Handler>
    	void handle_read_header(const boost::system::error_code& e,
    		T& t, boost::tuple<Handler> handler)
    	{
    		// ...
    	}
     
     
     
    private:
    	/// Constructor.
    	tcp_connection(boost::asio::io_service& io_service)
    		: m_socket(io_service)
    	{
    	}
     
    	/// The underlying socket.
    	boost::asio::ip::tcp::socket m_socket;
     
    	/// The size of a fixed length header.
    	enum { header_length = 8 };
     
    	/// Holds an outbound header.
    	std::string m_outbound_header;
     
    	/// Holds the outbound data.
    	std::string m_outbound_data;
     
    	/// Holds an inbound header.
    	char m_inbound_header[header_length];
     
    	/// Holds the inbound data.
    	std::vector<char> m_inbound_data;
    };
     
     
    #endif
    main.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "tcp_connection.h"
     
    int main()
    {
        boost::asio::io_service io_service;
     
        tcp_connection<>::pointer new_connection = tcp_connection<>::create(io_service);
     
        return 0;
    }
    En vous remerciant !

  2. #2
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Salut,
    Petit probl�me subtil. Ce n'est pas un probl�me de typename car ce n'est pas sur le type que le compilateur butte. En fait, tu demande l'adresse d'une m�thode template ... sans dire au compilateur qu'il s'agit d'une m�thode template :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    void (tcp_connection<Mode>::*f)(const boost::system::error_code&,T&, boost::tuple<Handler>)  // ERREUR ICI
          = &tcp_connection<Mode>::template handle_read_header<T, Handler>; // et non, l'erreur est ici...
    P.S. J'ai aussi l'erreur error: comma at end of enumerator list ici:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    struct ModeBase
    {
    	enum {
    		TEXT_MODE = 0,
    		BINARY_MODE = 1,
    	};
    };

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    Pour le ModeBase, c'est un oubli. Merci!

    Par contre, pour l'autre erreur je connaissais pas...
    Un grand � toi !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Erreur de compilation template sous GCC MINGW
    Par sukoi dans le forum Langage
    R�ponses: 14
    Dernier message: 14/04/2015, 11h57
  2. R�ponses: 8
    Dernier message: 30/08/2011, 16h17
  3. compil release ne marche pas sur autre pc
    Par Fred44210 dans le forum C++/CLI
    R�ponses: 0
    Dernier message: 04/03/2010, 11h01
  4. R�ponses: 4
    Dernier message: 07/05/2009, 20h29
  5. JS rame sous fireFox pas sur IE7
    Par socket77 dans le forum G�n�ral JavaScript
    R�ponses: 17
    Dernier message: 20/05/2008, 21h33

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