首页 新闻 会员 周边

【C++编译出错】error: ld returned 1 exit status

0
悬赏园豆:30 [已解决问题] 解决于 2019-10-29 22:15

把代码放到一个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文件,函数体

include"LinkList.h"

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);
}```

C++
推机的主页 推机 | 初学一级 | 园豆:127
提问于:2019-10-27 19:38

问题解决了,原因是没有为这三个文件建立工程文件而已。解决方案:在DEVC++里,先新建project然后把三个文件添加到一个project里就可以了。
下面两位兄弟有点说到了,怪我,还是对编译的东西不熟悉,一个小问题搞了那么多天。

推机 4年前
< >
分享
最佳答案
0

main函数引用了, 那个头文件中的函数, 要在main函数对应的那个文件里头包含那个头文件, 在链接的时候除了main函数对应的文件还需要有你那个函数对应的文件生成的.o文件, 不然链接不了

收获园豆:20
jakio6 | 小虾三级 |园豆:1318 | 2019-10-27 20:44

如果是用g++的话, 给没有被include的文件都加到命令行就行了

jakio6 | 园豆:1318 (小虾三级) | 2019-10-27 20:46

@jakio6: 啥意思啊朋友,就是把.o文件include在main函数对应的文件里吗?
我试了好像不行

推机 | 园豆:127 (初学一级) | 2019-10-27 23:01

@推机 不是在文件里,编译链接的时候

jakio6 | 园豆:1318 (小虾三级) | 2019-10-27 23:42

@推机: include的头文件里一般都是一些extern的函数,类型,的声明,c的话,编译是一个一个文件进行的,要知道变量的类型信息,函数接收参数情况这些编译才能进行下去,每个文件编译出来得到一个.o文件,链接起来得到可执行程序,c++应该也差不多

jakio6 | 园豆:1318 (小虾三级) | 2019-10-27 23:52

@jakio6: 还是不太懂应该怎么改朋友,编译链接的时候还可以操作吗?
我在用的是vscode,编写完程序以后只有调试和运行

推机 | 园豆:127 (初学一级) | 2019-10-28 09:21

@推机: ide应该有加入项目什么的,没用过

jakio6 | 园豆:1318 (小虾三级) | 2019-10-28 12:10

@jakio6: 嗯嗯,解决了朋友,只是我忘了把几个文件添加到一个project里,o(╯□╰)o,哈哈

推机 | 园豆:127 (初学一级) | 2019-10-29 22:16
其他回答(1)
0

C++编译的时候只编译.cpp,头文件要只用来放声明,一个.cpp只包含自己的同名头文件;你将一个cpp拆成三个后,应该是只有一个头文件,三个cpp,要保证文件包含不能缺少,也不能少了声明,声明过的函数也必须得有实现,不管是在同名cpp还是分出来得其他cpp;看不到你怎么分的,你先试试保证这些完整。或者将你拆分后的代码发给我我帮你看看。可以压缩工程发我邮箱15065781456@qq.com。

收获园豆:10
纳兰容若、 | 园豆:214 (菜鸟二级) | 2019-10-28 00:46

朋友,声明过的函数必须有实现,是说在main函数里一定要单独调用出来吗?
我想发邮箱给你但是我这边显示你那个地址不存在,qq也没能搜到。

支持(0) 反对(0) 推机 | 园豆:127 (初学一级) | 2019-10-28 08:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册