Qt中的invalid use of member(did you forget the ‘&’?)

abc2010xp 2012-05-14 01:45:54
Qt中出现invalid use of meber 一般是什么原因啊?
我最近在学Qt,写的代码中,就出现过这种问题,代码如下
result = connect_tracker_server(&sockfd);
if(result != 0)
{
logError("File:%s,line:%d.Fail to connect_tracker_server!\n",\
__FILE__,__LINE__);
QMessageBox::information(this, tr("Error:"), tr("Fail to connect the tracker server!"));

goto end;
}
红色标记的地方就是出问题的地方。请各位大侠多多指教
...全文
597 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
eyf0917 2012-05-29
  • 打赏
  • 举报
回复 1
这是一个变量的作用域的问题!

如果只读模式的话,直接使用就行了。
如果读写模式的话,需要在前面加上(::) 即&::socketfd; 就行了。
Red_angelX 2012-05-15
  • 打赏
  • 举报
回复
connect_tracker_server定义是什么
abc2010xp 2012-05-15
  • 打赏
  • 举报
回复
connect_tracker_server函数实现如下
int connect_tracker_server(int *sock)
{
int result;
struct sockaddr_in server_addr;

server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(pTrackerServerInfo->port);
result = inet_aton(pTrackerServerInfo->ip_addr,&server_addr.sin_addr);

if(result == 0)
{
return -1;
}


result = connect(*sock,(const struct sockaddr*)&server_addr,\
sizeof(server_addr));

if(result < 0)
{


return -1;
}


return 0;
}
其中pTrackerServerInfo 是一个结构指针,其结构原型为
typedef struct trackerserverinfo
{
char tracker_name[LINE_SIZE];
int port;
char ip_addr[DBFS_IPADDR_SIZE];
int timeout;
}TrackerServerInfo;

对了,还有结构指针,pTrackerServerInfo 是一个全局性的变量,其在构造函数中会进行初始化
abc2010xp 2012-05-14
  • 打赏
  • 举报
回复
还有一点需要说明的是,connect_tracker_server这个函数不是类的成员函数,只是在类的成员函数中调用了这个函数,其实他是在一个sockopt.h这个头文件中定义的
abc2010xp 2012-05-14
  • 打赏
  • 举报
回复
好的,我已经将connect_tracker_server的实现贴出来了,关于sockfd的使用我也修改了。非常感谢你的提点。
念茜 2012-05-14
  • 打赏
  • 举报
回复
首先,你没贴出connect_tracker_server的实现,我们没法判断是不是你函数实现有问题。
其次,你对sockfd的使用有错,当返回值<0 才是出错状态, >=0 都是OK的。(之前的帖子看到的)

16,226

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧