使用关键字 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);
/*****************************************/