2010-03-26 5 views
0

J'ai un simple fichier cpp qui utilise GIO. J'ai dépouillé tout pour montrer mon erreur de compilation:Besoin d'aide pour résoudre une erreur de compilation: erreur: conversion invalide de 'int' à 'GIOCondition'

Voici l'erreur que je reçois:

My.cpp:16: error: invalid conversion from ‘int’ to ‘GIOCondition’ 
make[2]: *** [My.o] Error 1 

Voici le dossier complet:

#include <glib.h> 

static gboolean 
read_socket (GIOChannel *gio, GIOCondition condition, gpointer data) 
{ 
    return false; 
} 


void createGIOChannel() { 
    GIOChannel* gioChannel = g_io_channel_unix_new(0); 
    // the following is the line causing the error: 
    g_io_add_watch(gioChannel, G_IO_IN|G_IO_HUP, read_socket, NULL); 
} 

Je l'ai vu d'autres exemple en utilisant gio, et je fais la même chose en appelant G_IO_IN | G_IO_HUP. Et la documentation http://www.gtk.org/api/2.6/glib/glib-IO-Channels.html, a déclaré que j'ai seulement besoin d'inclure, ce que j'ai fait.

Pouvez-vous me dire comment résoudre mon erreur? Une chose que je peux penser est que je le fais dans un fichier cpp. Mais g_io_add_watch est une fonction c?

Nous vous remercions de votre aide. J'ai passé des heures là-dessus mais je n'ai rien trouvé.

Répondre

1

Vous pouvez lancer ce

(GIOCondition) G_IO_IN|G_IO_HUP 

ou

void createGIOChannel() { 
    GIOChannel* gioChannel = g_io_channel_unix_new(0); 
    // the following is the line causing the error: 
    GIOCondition cond = G_IO_IN|G_IO_HUP; 
    g_io_add_watch(gioChannel, cond , read_socket, NULL); 
} 
+0

Merci. Mais pourquoi je dois le jeter si GIOCondition est défini comme 'ENUM' typedef enum { G_IO_IN \t GLIB_SYSDEF_POLLIN, G_IO_OUT \t GLIB_SYSDEF_POLLOUT, G_IO_PRI \t GLIB_SYSDEF_POLLPRI, G_IO_ERR \t GLIB_SYSDEF_POLLERR, G_IO_HUP \t GLIB_SYSDEF_POLLHUP, G_IO_NVAL \t GLIB_SYSDEF_POLLNVAL } GIOCondition; – michael

+0

GIOCondition est le type défini par l'utilisateur, donc vous devriez le transtyper. Pour plus d'informations sur les enums, consultez http://cplus.about.com/od/introductiontoprogramming/p/enumeration.htm – Jay

0

Je suppose que faiblit une erreur que vous devez utiliser un compilateur RPC qui ne typage strict.

Incase d'un compilateur C, qui devrait surtout être un avertissement.

Vous pouvez le classer ((GIOCondition) G_IO_IN | G_IO_HUP) ou créer une variable de type GIOCondition et transmettre la même chose à la fonction.