【问题标题】:Error while calling Select() in UDP sockets在 UDP 套接字中调用 Select() 时出错
【发布时间】:2015-07-28 03:00:14
【问题描述】:

我正在 Windows 窗体应用程序中进行套接字编程(UDP 套接字)。我想使用 select()。

socket()在按钮点击时被调用,select()在不同的线程中被调用并且socket描述符被声明为全局的。

以下是我关于选择的部分代码:

    fd_set fds;
    struct timeval tv;
    tv.tv_sec = 1;
    tv.tv_usec = 500000;
    FD_ZERO(&fds);
    FD_SET(s_8888, &fds);
    int n=s_8888;  //s_8888 is socket descriptor
    select (n+1, &fds, 0 , 0 , &tv );

编译代码时出现以下错误

error C2064: term does not evaluate to a function taking 5 arguments    

我无法理解我哪里做错了。

【问题讨论】:

  • 您确定没有在给出错误的上下文中声明另一个名为select 的变量吗?另外,您是否查看了错误消息的文档 (msdn.microsoft.com/en-us/library/z72c1dfd.aspx)?
  • @alk 是的,当我评论选择时没有错误
  • @alk 我在控制台应用程序中编写了相同的代码,它工作正常

标签: winforms visual-studio-2010 sockets select visual-c++


【解决方案1】:

您可能通过定义另一个具有此名称的变量来“隐藏”winsock 库的函数 select()

这段代码

#include <Winsock2.h> /* Provide prototype for select(). */

void foo(void)
{
  int select;
  ...
  select(0, 0, 0, 0, 0);

会通过使用变量int select“遮蔽”函数select()来激发error C2064

修复这个重命名

  int select;

  int select_whateveryoulike;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多