我在VC6.0里面写了两个.cpp文件,一个.h,其中两个.cpp文件编译都没问题,但却组建不了.exe。帮忙看看。

自学C语言,所以有很多不懂,现在刚学到函数调用这里。其中第一个.cpp文件,命名为1.cpp,代码如下:#include<stdio.h>#include"3.h"int... 自学C语言,所以有很多不懂,现在刚学到函数调用这里。

其中第一个.cpp文件,命名为1.cpp,代码如下:
#include <stdio.h>
#include "3.h"
int main()
{
extern void sub(); // sub()不在3.h文件中,所以用extern声明。
x=x+5; //前面声明了#include "3.h",可以调用。
add(); //前面声明了#include "3.h",可以调用。
sub(); //前面声明了extern void sub(),可以调用。
printf("x=%d,y=%d",x,y);
return 0;
}

第二个.cpp文件命名为2.cpp,代码如下:
#include <stdio.h>
#include "3.h"
void sub(){x=x-5;} //调用了全局变量X,X虽然是全局变量,但X是在3.h头文件定义的,所以在前面声明了#include "3.h"

第三个文件是.h头文件,命名为3.h,代码如下:
#include <stdio.h>
int x=10; //定义了全局变量X,供1.CPP和2.CPP调用。
int y=10; //定义了全局变量Y,供1.CPP和2.CPP调用。
void add() //定义外部函数。
{
y=10+x;
x=2*x;
}

两个.CPP文件编译都没问题,但想组建.EXE时却出现如下错误:
2.obj : error LNK2005: "void __cdecl add(void)" (?add@@YAXXZ) already defined in 1.obj
2.obj : error LNK2005: "int y" (?y@@3HA) already defined in 1.obj
2.obj : error LNK2005: "int x" (?x@@3HA) already defined in 1.obj
Debug/005.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.

005.exe - 1 error(s), 0 warning(s)

整个程序错在哪里,为什么能够编译却不能组建.exe。
展开
 我来答
帐号已注销
2012-03-30 · TA获得超过3000个赞
知道大有可为答主
回答量:1338
采纳率:75%
帮助的人:1297万
展开全部
.h文件里不能有定义,只能有声明。
你现在头文件里全是定义,这个头文件被包含超过一次,就会出现链接错误。
解决办法是把:
int x=10; //定义了全局变量X,供1.CPP和2.CPP调用。
int y=10; //定义了全局变量Y,供1.CPP和2.CPP调用。
放到其中一个cpp文件里,而在另一个cpp文件里用:
extern int x;
extern int y;引用第一个cpp文件里定义的全局变量。
add函数也是一样,在头文件里只写函数的声明:
voia add();
在其中一个cpp文件里定义add函数。你可以把add函数的定义放到第一个cpp文件里就行。
xoalyg
2012-03-30 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2378万
展开全部
1、如果VC已经打开,请关闭工作空间。
2、分别双击磁盘文件3.h、2.cpp和1。cpp
3、单击《窗口(W)》菜单,选择2.cpp,选择《组建(B)》编译2.cpp
4、单击《窗口(W)》菜单,选择1.cpp,选择《组建(B)》编译1.cpp
5、选择《组建(B)》下面的<全部重建>
6、Ctrl + F5运行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Leon14631
2012-03-30
知道答主
回答量:6
采纳率:0%
帮助的人:9559
展开全部
链接出错......
头文件不应该定义函数与变量赋值...

3.h
改成

int x; //定义了全局变量X,供1.CPP和2.CPP调用。

int y;

//定义了全局变量Y,供1.CPP和2.CPP调用。

void add() ; //定义外部函数。

定义与赋值在1.cpp
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-03-30
展开全部
void add() //定义外部函数。
这个函数体
不要放在.h里
放在一个.c里
然后在.h里 extern void add();即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式