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

自学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。

.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文件里就行。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-30
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运行。
第2个回答  2012-03-30
链接出错......
头文件不应该定义函数与变量赋值...

3.h
改成

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

int y;

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

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

定义与赋值在1.cpp
第3个回答  2012-03-30
void add() //定义外部函数。
这个函数体
不要放在.h里
放在一个.c里
然后在.h里 extern void add();即可
相似回答