首页| 论坛| 消息

标题:FD_ZERO(); Qt Creator 报错:expected token ')' got';'
作者:typeng
日期:2012-07-15 23:30
内容:

小弟我用Qt Creator 开发 ,在槽函数中调用一个串口函数,串口函数用了select()函数设置为非阻塞模式。
我已经加上了头文件:#include #include #include #include
这段代码出现了问题:fd_set rfds; FD_ZERO(&rfds);FD_SET(ports.handle, &rfds);
Qt Creator 的编辑器中, FD_ZERO(&rfds); 这一句下面出现了可恶的红线,鼠标放上显示:expected token ')' got';' 程序可以编译,但是运行时,完全没有串口非阻塞效果,可是显然不是代码的问题阿,那位仁兄知道这是怎么回事吗?是Qt 的bug吗?


#1 回 楼主(typeng) 的帖子 [typeng 07-15 23:34]
补充一下:在不用QT时,这段代码工作正常,也没有报错。为什么在Qt中调用就有问题呢?
还有: FD_ZERO(&rfds);报错,可是FD_SET(ports.handle, &rfds);没报错,这两句都是用宏实现的,可是为什么只有第一句报错呢?Help!!!
#2 [typeng 07-15 23:37]
具体代码:
int ComRd(int portNo, unsigned char buf[], int maxCnt, int Timeout)
{
fd_set rfds;
int actualRead = 0;
struct timeval tv;
int retval;
if (!ports.busy)
{
printf("Com%d is not valid\n",portNo);
return -1;
//assert(0);
}

FD_ZERO(&rfds);
FD_SET(ports.handle, &rfds);
tv.tv_sec = Timeout/1000;
tv.tv_usec = (Timeout%1000)*1000;
retval = select(8, &rfds, NULL, NULL, &tv);
if (retval)
{
actualRead = read(ports.handle, buf, maxCnt);
}
else printf("ComRd Warning!!!!:Timeout.\n");
return actualRead;
}
#3 [typeng 07-16 14:32]
问题已解决,Qt Creator 的编辑器中, FD_ZERO(&rfds); 这一句下面出现红线,鼠标放上显示:expected token ')' got';'这是Qt 编译器的一个bug,在诺基亚官方网站上有外国人曾经发贴。但是这个bug只是编辑器显示有错,并不影响运行。我用select()函数失败,是因为select(8, &rfds, NULL, NULL, &tv); 参数8设置的太小的缘故。 本应很快发现,但是注意力都集中在这个bug上了,我太2了

回复 发表
主题 版块