2010-03-26 1 views
0

GIO를 사용하는 간단한 cpp 파일이 있습니다. 내 컴파일 에러를 보여주기 위해 모든 것을 제거했다 :컴파일러 오류를 해결하는 데 도움이 필요합니다 : 오류 : 'int'에서 'GIOCondition'으로의 변환이 올바르지 않습니다.

여기

입니다 오류가 내가 얻을 : 여기

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

은 전체 파일입니다

#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); 
} 

내가 지오를 사용하는 다른 예를 보았다, G_IO_IN | G_IO_HUP을 호출 할 때도 동일한 작업을 수행하고 있습니다. 그리고 문서 http://www.gtk.org/api/2.6/glib/glib-IO-Channels.html은 내가 포함 할 필요가 있다고 말했다.

오류를 해결하는 방법을 알려주십시오.

내가 생각할 수있는 한가지는 cpp 파일에서이 작업을 수행하는 것입니다. 하지만 g_io_add_watch는 c 함수입니까?

도움 주셔서 감사합니다. 나는 이것에 시간을 보냈지 만 어디에도 가지 않았다.

답변

1

당신은 캐스트 할 수 있습니다 그것은

(GIOCondition) G_IO_IN|G_IO_HUP 

또는

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

감사합니다. 나는 그것을 캐스팅해야하는 이유 그러나 GIOCondition은 '열거'형식 정의 열거 형으로 정의 된 경우 { 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은 사용자가 정의한 유형이므로 유형 변환해야합니다. 열거 형에 대한 자세한 내용은 http://cplus.about.com/od/introductiontoprogramming/p/enumeration.htm을 참조하십시오. – Jay

0

난 당신이 엄격한 유형 검사를 수행하는 CPP 컴파일러를 사용하고 있어야합니다대로 오류를 신고있다 같아요.

C 컴파일러의 경우 대부분 경고 여야합니다.

(GIOCondition) G_IO_IN | G_IO_HUP)을 타입 변환하거나 GIOCondition 유형의 변수를 생성하여 함수에 전달할 수 있습니다.