C语言中头文件和源文件的关系

在11.h中写
#include<stdio.h>
void add();
在11.c中写
void add(){
printf("aaaa");
}
在22.c中写
#include"11.h"
void main(){
add();
}

运行编译 22.c后,为什么提示无法解析add这个符号?
这三个文件放到了一个文件夹里,连接器不是可以找到add函数的定义文件吗?

1、cpp文件和.h文件有各自的分工,一般来说,h文件中是类的定义和类成员函数的声明,以及全局变量定义等;cpp文件是对应h文件中成员函数的代码实现。一般cpp文件代码较多。
这样做的好处:h文件只声明类成员函数,简单易懂,当其他文件要调用该类的接口时,只需包含该h文件,并在编译时将该h文件和同名cpp文件编译出的库文件一起连接即可。(如在lz写的main文件中只需 #include "Alarm.h")

2、 一般我们在编译的时候只编译cpp文件,将该cpp包含的h文件设为依赖。从而将这些cpp文件和h文件联系起来
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-06-17
11.c也要导入11.h追问

上图是运行22.c的报错

11.c里面写的是

#include"11.h"

void add(){

printf("asasasa");

}

追答

11.h声明加上extern
extern void add();

追问

还是不行

追答

你11.h路径写全了,我试了,我11.h放其他盘,路径写全,11.c不导入11.h,不加exten都行。比如22.c写#include"c:\11.h"。或者写相对路径".\11.h",但必须在同一目录

追问

你看下弄错没有,他还是报错,有空我试试别的IDE吧。

追答

路径写对就可以啊,我这边用code试的,我keil写单片机程序也可以导入。

本回答被提问者采纳
第2个回答  2018-06-17
你是怎么编译的?追问

我用的ide是vs2013,先点的生成,然后就报错,
错误 1 error LNK2019: 无法解析的外部符号 _add,该符号在函数 _main 中被引用 D:\project-c\ConsoleApplication19\ConsoleApplication19\22.obj ConsoleApplication19

相似回答