免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10746 | 回复: 12
打印 上一主题 下一主题

error: dereferencing pointer to incomplete type ?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-22 17:32 |只看该作者 |倒序浏览
socket 编程中,通过gethostbyname() 或者
gethostbyaddr 取得主机的 hostent 解构的信息,
现在从中提取出地址信息:

  1. struct host * host;
  2. struct sockaddr_in address;
  3. ....
  4. ...
  5. ...
  6. memcpy (&address.sin_addr, host->h_addr_list[0], sizeof(address.sin_addr));
  7. 或者:       
  8. address.sin_addr=*((struct in_addr *)host->h_addr);
复制代码


编译的时候出现这样的错误:
error: dereferencing pointer to incomplete type  ( 提领指向不完全类型的指针)
请问这个提示是什么意思,代码应该怎么写才能把地址拿出来。


还有,当我进行强制地址类型转换的时候提示:
   warning: assignment from incompatible pointer type
  
代码是这样的:

  1.              struct in_addr inaddr;
  2.              .....
  3.              .....
  4.              .....
  5.              if (inet_aton(argv[1], &inaddr))
  6.                     host = gethostbyaddr((char *) &inaddr, sizeof (inaddr), AF_INET);
复制代码

这样会不会不安全?

论坛徽章:
0
2 [报告]
发表于 2006-07-22 19:59 |只看该作者
高手帮帮忙啊

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2006-07-22 23:05 |只看该作者
〉〉memcpy (&address.sin_addr, host->h_addr_list[0], sizeof(address.sin_addr));
你看看address.sin_addr是什么类型,
而host->h_addr_list[0]又是什么类型。

论坛徽章:
0
4 [报告]
发表于 2006-07-22 23:19 |只看该作者
你应该inlude定义struct host的头文件, 而不是只有一个向前声明struct host;

论坛徽章:
0
5 [报告]
发表于 2006-07-22 23:22 |只看该作者
>>error: dereferencing pointer to incomplete type  ( 提领指向不完全类型的指针)

应该是不知道这个类型的定义

论坛徽章:
0
6 [报告]
发表于 2006-07-23 08:53 |只看该作者
address.sin_addr 是 in_addr 类型,存放ip地址

host->h_addr_list[0]

是 struct hostent 类型中的
char **h_addr_list 中的第一项啊,这个数组中的每个指针都指向
一个  struct in_addr 类型,

hosy->h_addr_list[0] 就是一个in_addr类型啊 ,类型应该是一样的

上面我写错了,应该是 struct hosent *host
他的头文件应改是 <netdb.h>吧
可是我已经包括了。

论坛徽章:
0
7 [报告]
发表于 2006-07-23 09:24 |只看该作者
struct in_addr只声明没定义。
不知道Linux上是哪个头文件,NetBSD上是/usr/include/netinet/in.h
#include <netinet/in.h>

论坛徽章:
0
8 [报告]
发表于 2006-07-23 10:58 |只看该作者
这个文件我也包含了
我都包含了这些文件
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>

但还是有上面的错误

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2006-07-23 20:31 |只看该作者
原帖由 Co_Coiiz 于 2006-7-23 08:53 发表
address.sin_addr 是 in_addr 类型,存放ip地址

host->h_addr_list[0]

是 struct hostent 类型中的
char **h_addr_list 中的第一项啊,这个数组中的每个指针都指向
一个  struct in_addr 类型,

ho ...

如果是第一项,怎么是char **类型,
而不是struct hostent *类型呢?

论坛徽章:
0
10 [报告]
发表于 2006-07-23 21:00 |只看该作者
char **h_addr_list 这个指针数组是
struct hostent 类型的最后一项

而他的每一个指针是指向 一个in_addr 类型的

所以host->h_addr_list[0] 应该是一个 in_addr类型的地址啊

[ 本帖最后由 Co_Coiiz 于 2006-7-23 21:26 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP