读书人

自写头文件有关问题

发布时间: 2013-01-23 10:44:49 作者: rapoo

自写头文件问题
环境:DevCPP4.9.9.2
问题描述,自己尝试写了个简单的头文件,但是一直提示 [Linker error] undefined reference to `Out()' ,求解释求教育
第一个文件:main函数
main.cpp


#include<stdlib.h>
#include<stdio.h>
#include"testhead.h"

int main(void)
{
Out();
system("pause");
return 0;
}

第二个文件,也即头文件:testhead.h

#ifndef TESTHEAD_H
#define TESTHEAD_H
char string[]="Hello World!";
void Out(void);
#endif

第三个文件,头文件所声明的函数实现的问题:testhead.cpp

#include"testhead.h"
void Out(void){
printf("%s",string);
}

我如果将Out函数的实现放在头文件testhead.h中就可以编译通过,但是这样的话岂不是函数的实现和声明都在头文件中,这样貌似是不推荐的啊 c head reference
[解决办法]
要把testhead.cpp也加入工程一起编译。
[解决办法]
链接错误。。检查testhead.cpp是否在源文件中编译了。。不然不会出错的。
参考
有时候在编译C++代码的时候我们经常会遇到一些奇怪的,灵异的错误,也许这就是我遇到的最离奇的错误吧,下面和大家一起分享一下
有一天自己在编译c语言课设的错误~编译时报[Linker error] undefined reference to 'Insert_a_Record(stud *)错误,改得我郁闷了~

以前没遇到过这样的错误,在网上得知undefined reference表示没有连接在库~我就郁闷了,一个简单的课设,自己定义的一个函数怎么会要求连接到什么库呢?花了我大概一个小时才发现为什么会有这样的错误。比如我们写一个C程序:

#include <stdio.h>
int change(int a, int b);
int main(int argc, char *argv[])
{
int a, b;
change(a, b);
}
这个时候编译就会报这样的错误。原因在于我们在程序中声明了change这个函数。可是却没有在程序中实现这个函数。而编译时人认为我们在其它源文件或库中实现了这一函数,而包含的头文件中却没有任何地方实现这一函数,所以就报错:没有连接到库。通俗一点说,就好像我们给某个人说我的书包里有一张什么样的纸,但这个人去找的时候却没有找到,他就回来告诉我们说没有找到这张纸。
这里,某人就像是编译器,书包就像是编译时候所有包含的库,而这张纸就好比我们声明的那个函数。当然,一般是不会有这样错误的,而昨天那同学却把Insert_a_Record的实现函数名写成了Insert_a_record。。。就导致了杯具。。。
个人blog域名http://www.cdusoft.com,欢迎大家来访讨论

记录下来,希望对其它同胞有点用~报这样错误的时候,注意两点:
如果XX部分是自己写的函数,就检查有没有实现这个函数,或者函数名有没有写正确。
如果XX部分是其它扩展库函数,就检查头文件有没有正确包含。(标准库没有包含一般会报first use this function)。

读书人网 >C语言

热点推荐