读书人

使用关键字 extern 导致的链接异常怎么

发布时间: 2012-01-18 00:23:26 作者: rapoo

使用关键字 extern 导致的链接错误如何解决?
/*****************************************/
/* main.c */
/*****************************************/
#include "stdio.h "
#include "mydefine.h "
main()
{
int s, i = 100;
s = sum1ton(i);
printf( "s=%d ", s);
}
/*****************************************/


/*****************************************/
/* mydefine.c */
/*****************************************/
int n = 100;
int sum1ton(int n);

int sum1ton(int n)
{
int s = 0, i;
for (i = 0; i < n; i++)
s += i;
return s;
}
/*****************************************/


/*****************************************/
/* mydebug.h */
/*****************************************/
extern int n = 100;
extern int sum1ton(int n);
/*****************************************/


上述三个文件,在VC++6.0下编译(当然是三个文件都加入工作区),怎么会出2个连接错误:
Linking...
main.obj : error LNK2001: unresolved external symbol _sum1ton
Debug/main.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

main.exe - 2 error(s), 0 warning(s)

请问这是为什么?该如何解决?
谢谢!



[解决办法]
将extern int n = 100;
extern int sum1ton(int n);
放到mydebug.c里
[解决办法]
/*****************************************/
/* mydefine.c */
/*****************************************/
extern int n = 100;

int sum1ton(int n)
{
int s = 0, i;
for (i = 0; i < n; i++)
s += i;
return s;
}
/*****************************************/


/*****************************************/
/* mydebug.h */
/*****************************************/
int n;
int sum1ton(int n);
/*****************************************/

[解决办法]
...
你在 main.c 里面 #include "mydefine.h "
可是你声明 extern int sum1ton(int n); 的那个头文件叫 mydebug.h

[解决办法]
正确答案在这里....


变量的申明和赋值都应该在CPP文件里面

比如
//hello.cpp
int hello = 10;

然后需要引用此变量的地方,无论CPP还是H文件,都应该如下格式


extern int hello;
不能赋值.

[解决办法]
/*****************************************/
/* mydefine.c */
/*****************************************/
int n = 100;

int sum1ton(int n)
{
int s = 0, i;
for (i = 0; i < n; i++)
s += i;
return s;
}
/*****************************************/


/*****************************************/
/* mydebug.h */
/*****************************************/
extern int n;
int sum1ton(int n);
/*****************************************/

读书人网 >VC/MFC

热点推荐