把代码放到一个cpp文件运行无误后,拆分到三个文件(头文件,cpp,主函数main)里后出现该错误。重启几遍后无果,上网搜索后说是“只在头文件中写了函数声明,没在源文件中写实现造成的”,或者其他,没有给出解决办法。
代码如下:
//main函数文件
using namespace std;
int main()
{
LinkNode *L = NULL;
Create(L);
return 0;
}
//头文件
#include"stdio.h"
#include<iostream>
#include<stdlib.h>
struct LinkNode
{
LinkNode *next;
int data;
};
void Insert(LinkNode *L, int num);
void Display(LinkNode *L);
void Create(LinkNode *L);
```
//.cpp文件,函数体
using namespace std;
void Insert(LinkNode L,int num)
{
LinkNode p = L->next,pre=L,Tem; //p指向第一个结点用来比较,pre指向p前面的点。Tem是新结点
Tem = new LinkNode;
Tem->data = num;
if(L->next == NULL) //当L没有结点时,插入
{
Tem->next = NULL;
L->next = Tem;
return;
}
while (p && (p->data < num)) //寻找合适的位置插入
{
pre = p;
p = p->next;
}
if(p == NULL) //没有找到合适位置,一直来到了链表最后
{
pre->next = Tem;
Tem->next = NULL;
}
else //找到了合适位置
{
Tem->next = p;
pre->next = Tem;
}
}
void Display(LinkNode L)
{
LinkNode o;
o = L->next;
while(o != NULL)
{
cout<<o->data<<" ";
o = o->next;
}
}
void Create(LinkNode *L)
{
L = new LinkNode;
L->data = 0;
L->next = NULL; //初始化L
int num=0;
cout<<"请输入要插入的元素,输入-1结束"<<endl;
cin>>num;
while(num != -1)
{
Insert(L,num);
L->data = L->data +1;
cin>>num;
}
cout<<"输入完成,列表元素如下:"<<endl;
Display(L);
}```
main函数引用了, 那个头文件中的函数, 要在main函数对应的那个文件里头包含那个头文件, 在链接的时候除了main函数对应的文件还需要有你那个函数对应的文件生成的.o文件, 不然链接不了
如果是用g++的话, 给没有被include的文件都加到命令行就行了
@jakio6: 啥意思啊朋友,就是把.o文件include在main函数对应的文件里吗?
我试了好像不行
@推机 不是在文件里,编译链接的时候
@推机: include的头文件里一般都是一些extern的函数,类型,的声明,c的话,编译是一个一个文件进行的,要知道变量的类型信息,函数接收参数情况这些编译才能进行下去,每个文件编译出来得到一个.o文件,链接起来得到可执行程序,c++应该也差不多
@jakio6: 还是不太懂应该怎么改朋友,编译链接的时候还可以操作吗?
我在用的是vscode,编写完程序以后只有调试和运行
@推机: ide应该有加入项目什么的,没用过
@jakio6: 嗯嗯,解决了朋友,只是我忘了把几个文件添加到一个project里,o(╯□╰)o,哈哈
C++编译的时候只编译.cpp,头文件要只用来放声明,一个.cpp只包含自己的同名头文件;你将一个cpp拆成三个后,应该是只有一个头文件,三个cpp,要保证文件包含不能缺少,也不能少了声明,声明过的函数也必须得有实现,不管是在同名cpp还是分出来得其他cpp;看不到你怎么分的,你先试试保证这些完整。或者将你拆分后的代码发给我我帮你看看。可以压缩工程发我邮箱15065781456@qq.com。
朋友,声明过的函数必须有实现,是说在main函数里一定要单独调用出来吗?
我想发邮箱给你但是我这边显示你那个地址不存在,qq也没能搜到。
问题解决了,原因是没有为这三个文件建立工程文件而已。解决方案:在DEVC++里,先新建project然后把三个文件添加到一个project里就可以了。
– 推机 5年前下面两位兄弟有点说到了,怪我,还是对编译的东西不熟悉,一个小问题搞了那么多天。