免费注册 查看新帖 |

Chinaunix

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

自定义头文件的问题,谢谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-07 17:10 |只看该作者 |倒序浏览
1、我自定义了一个头文件:mine.h,包含一个函数:erroutput();
2、在一个源码中引用erroutput(),包含头文件#include "mine.h";
3、编译源码的时候报错:undefined reference to `erroutput';

请问是为什么?

论坛徽章:
0
2 [报告]
发表于 2008-12-07 19:05 |只看该作者
mine.h怎么写的?

论坛徽章:
0
3 [报告]
发表于 2008-12-07 19:40 |只看该作者
一般头文件只包含声明,不包含实现吧

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2008-12-07 19:52 |只看该作者

回复 #3 izhier 的帖子

对头,楼主还是没有搞明白声明和定义的区别。
flybutter 该用户已被删除
5 [报告]
发表于 2008-12-07 22:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2008-12-08 04:06 |只看该作者

回复 #1 boerhawking 的帖子

erroutput();

这个函数你没实现吧?把你的*.h 和 *.c 贴出来瞅瞅~~

论坛徽章:
0
7 [报告]
发表于 2008-12-08 09:30 |只看该作者
谢谢!这是我测试APUE上的头文件遇到的问题。
mine.h的内容:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
static void err_doit(int errnoflag,const char *fmt,va_list ap)
{
    int errno_save;
    char buf[1000];

    errno_save=errno;
    vsprintf(buf,fmt,ap);
    if(errnoflag)
        sprintf(buf+strlen(buf),":%s",strerror(errno_save));
    strcat(buf,"\n");
    fflush(stdout);
    fputs(buf,stderr);
    fflush(NULL);
   return;
}

void err_sys(const char *fmt,...)
{
   va_list ap;
   va_start(ap,fmt);
   err_doit(1,fmt,ap);
   va_end(ap);
   exit(1);
}


然后我在test.c文件调用err_sys()函数。
test.c的内容:
#include “mine.h”
int main(void)
{
  err_sys("this is test\n");
  return;
}


test.c文件和mine.h文件在同一文件夹,但是我"gcc -o test.out test.c"编译test.c的文件时,编译器报错“undefined reference to `erroutput'”。



另外:刚才各位仁兄说.h文件里是声明,.c文件里是实现,是怎么回事?谢谢了~

[ 本帖最后由 boerhawking 于 2008-12-8 09:49 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-12-08 09:33 |只看该作者
原帖由 boerhawking 于 2008-12-8 09:30 发表
谢谢!这是我测试APUE上的头文件遇到的问题。
mine.h的内容:
#include
#include
#include
#include
static void err_doit(int errnoflag,const char *fmt,va_list ap)
{
    int errno_save;
     ...

#include "mine.h"
就可以了

论坛徽章:
0
9 [报告]
发表于 2008-12-08 09:35 |只看该作者
extern 关键字

论坛徽章:
0
10 [报告]
发表于 2008-12-08 09:46 |只看该作者

8楼是正解

<mime.h>这么写是找不到头文件的
或者LZ使用gcc -I编译参数,详情查看文档。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP