error LNK2001: unresolved external symbol void __cdecl error()
场景:error LNK2001: unresolved external symbol "void _cdecl sort(int *int)解决方法
error LNK2001: unresolved external symbol "void __cdecl sort(int *,int)
编译时正常,运行时提示下面错误。
123.obj : error LNK2001: unresolved external symbol "void __cdecl sort(int *,int) " (?sort@@YAXPAHH@Z)
Debug/123.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
123.exe - 2 error(s), 0 warning(s)
#include <stdio.h>
void main()
{
int i,a[10];
int *p;
void sort(int *,int);//这里错,函数指针类型声明出错,
//改为void sort(int *x,int)都报同样错误
//函数传送的是地址,我这里声明是指针类型不行吗?
//改为void sort(int x[],int)就可以了,一定要这样吗?
p=a;
for(i=0;i <10;i++)
{
scanf( "%d ",p++);
}
p=a;
sort(p,10);
for(p=a,i=0;i <10;i++)
{
printf( "%d ",*p);
p++;
}
}
void sort(int x[],int n)
{
int i,j,k,t;
int *p;
p=x;
for(i=0;i <=n-2;i++)
{
k=i;
for(j=i+1;j <n;j++)
{
if(x[k] <x[j])
k=j;
}
if(k!=i)
{
t=x[k];x[k]=x[i];x[i]=t;
}
}
}
------解决方案--------------------
main中的void sort(int x[],int n);
放到main前面
------解决方案--------------------
函数原型描述了函数到编译器的接口,也就是说,它将函数返回值的类型(有的话)以及参数的类型和数量告诉编译器。sort(p,10);函数调用,sort的原型高数编译器sort有两个参数,一个int型指针,一个int型,由于原型,编译器知道怎样检索和解释p和10。如果没有原型,编译器只能在文件中进一步查找,以了解函数是如何定义的。这样一是效率不高,搜索时将停止main()
的编译。另一个更为严重的问题,函数可能不和main在同一个文件中。事实上工程中的程序一般都是有多个文件构成,为避免因查找函数定义引起的效率等问题都是将函数原型放在头文件中,本问中即是将sort函数的原型放在main()之前。当然,放在main中也能运行,但是,代码重用效率不高,其他函数要调用sort也要重新声明函数。
error LNK2001: unresolved external symbol "void __cdecl sort(int *,int)
编译时正常,运行时提示下面错误。
123.obj : error LNK2001: unresolved external symbol "void __cdecl sort(int *,int) " (?sort@@YAXPAHH@Z)
Debug/123.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
123.exe - 2 error(s), 0 warning(s)
#include <stdio.h>
void main()
{
int i,a[10];
int *p;
void sort(int *,int);//这里错,函数指针类型声明出错,
//改为void sort(int *x,int)都报同样错误
//函数传送的是地址,我这里声明是指针类型不行吗?
//改为void sort(int x[],int)就可以了,一定要这样吗?
p=a;
for(i=0;i <10;i++)
{
scanf( "%d ",p++);
}
p=a;
sort(p,10);
for(p=a,i=0;i <10;i++)
{
printf( "%d ",*p);
p++;
}
}
void sort(int x[],int n)
{
int i,j,k,t;
int *p;
p=x;
for(i=0;i <=n-2;i++)
{
k=i;
for(j=i+1;j <n;j++)
{
if(x[k] <x[j])
k=j;
}
if(k!=i)
{
t=x[k];x[k]=x[i];x[i]=t;
}
}
}
------解决方案--------------------
main中的void sort(int x[],int n);
放到main前面
------解决方案--------------------
函数原型描述了函数到编译器的接口,也就是说,它将函数返回值的类型(有的话)以及参数的类型和数量告诉编译器。sort(p,10);函数调用,sort的原型高数编译器sort有两个参数,一个int型指针,一个int型,由于原型,编译器知道怎样检索和解释p和10。如果没有原型,编译器只能在文件中进一步查找,以了解函数是如何定义的。这样一是效率不高,搜索时将停止main()
的编译。另一个更为严重的问题,函数可能不和main在同一个文件中。事实上工程中的程序一般都是有多个文件构成,为避免因查找函数定义引起的效率等问题都是将函数原型放在头文件中,本问中即是将sort函数的原型放在main()之前。当然,放在main中也能运行,但是,代码重用效率不高,其他函数要调用sort也要重新声明函数。