C程序获取链接器错误。我真的能';我看不出是什么';这是不对的
我的密码有问题。我正在使用Dev-C++4.9.9.2。。。 问题是链接器错误,我知道通常链接器错误是常见的 链接器的错误如下:也许我忽略了,但我真的不知道出了什么问题 [链接器错误]未定义对“getUniqueNumber”的引用 [Linker error]未定义对“straight\u select\u int”的引用 [Linker error]对“straight\u insert\u int”的未定义引用 [链接器错误]未定义对“bubblesort_int”的引用 [Linker error]未定义对“quicksort\u int”的引用 ld返回1个退出状态 U:\My Documents\alg\AlgProject\alg\Makefile.win[Build Error][Project1.exe]错误1 不管怎样,这是我的密码:C程序获取链接器错误。我真的能';我看不出是什么';这是不对的,c,linker,C,Linker,我的密码有问题。我正在使用Dev-C++4.9.9.2。。。 问题是链接器错误,我知道通常链接器错误是常见的 链接器的错误如下:也许我忽略了,但我真的不知道出了什么问题 [链接器错误]未定义对“getUniqueNumber”的引用 [Linker error]未定义对“straight\u select\u int”的引用 [Linker error]对“straight\u insert\u int”的未定义引用 [链接器错误]未定义对“bubblesort_int”的引用 [Linker
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
# define N 30000
void bubblesort_int(int p[]);
void quicksort_int(int left, int right, int p[]);
void straight_select_int(int p[]);
void straight_insert_int(int p[]);
int getUniqueNumber(int *p, int i);
int main(int argc, char *argv[])
{
int p[N],pA[N];
int i,j,x;
time_t t0,t1;
for (j=0; j<10; j++)
{
srand(time(0));
for(i=0;i<N;i++)
{
p[i]=getUniqueNumber(p,i);
}
for (i=0; i<N; i++)
{
pA[i] = p[i];
}
time(&t0);
straight_select_int(p);
time(&t1);
x=difftime(t1,t0);
for(i=0;i<N;i++)
{
p[i]=pA[i];
}
time(&t0);
straight_insert_int(p);
time(&t1);
x=difftime(t1,t0);
for(i=0;i<N;i++)
{
p[i]=pA[i];
}
for (i=0;i<N;i++)
p[i]=pA[i];
time(&t0);
bubblesort_int(p);
time(&t1);
x=difftime(t1,t0);
for(i=0;i<N;i++)
{
p[i]=pA[i];
}
time(&t0);
quicksort_int(0, N-1, p);
time(&t1);
x=difftime(t1,t0);
system("PAUSE");
return 0;
getch();
}
////////////////////////////////////////////////////////////////////////////////
void straight_select_int(int p[]);
{
int i,j,k,min;
for (i=0; i<N-1; i++)
{
k = i;
min = p[i];
for (j = i+1; j<N; j++)
{
if (p[j] < min)
{
k = j;
min = p[j];
}
}
p[k] = p[i] ;
p[i] = min;
}
}
////////////////////////////////////////////////////////////////////////////////
void straight_insert_int(int p[])
{
int i,j,x;
for (i = 1; i < N; i++)
{
x = p[i];
j = i-1;
while ((x < p[j]) && (j >= 0))
{
p[j+1] = p[j] ;
j = j-1 ;
}
p[j+1] = x ;
}
}
////////////////////////////////////////////////////////////////////////////////
void bubblesort_int(int p[])
{
int i,j,temp;
for (i=1; i<N; i++)
for (j=N-1; j>=i; j--)
if (p[j-1] > p[j])
{
temp = p[j-1];
p[j-1] = p[j] ;
p[j] = temp ;
}
////////////////////////////////////////////////////////////////////////////////
void quicksort_int(int left, int right, int p[])
{
int i, j, mid, x, temp;
if (left < right)
{
i = left;
j = right;
mid = (left+right)/2;
x = p[mid];
while (i < j)
{
while (p[i] < x)
i++;
while (p[j] > x)
j--;
if (i < j)
{
if (p[i] == p[j])
{
if (i<mid)
i++;
if (j>mid)
j--;
}
else
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
quicksort_int(left,j-1,p);
quicksort_int(j+1,right,p);
}
}
////////////////////////////////////////////////////////////////////////////////
int getUniqueNumber(int *p, int i)
{
int x,j, found;
do
{
x = rand();
found = 0;
j = 0;
while (j<=i && found == 0)
{
if (p[j] == x)
{
found = 1;
}
else
{
j++;
}
}
}
while (found == 1);
return x;
}
}
}
#包括
#包括
#包括
#包括
#包括
#包括
#定义N 30000
void bubblesort_int(int p[]);
void quicksort_int(int left,int right,int p[]);
无效直线选择整数(整数p[]);
空直插入(INTP[]);
int getUniqueNumber(int*p,int i);
int main(int argc,char*argv[])
{
int p[N],pA[N];
int i,j,x;
时间t0,t1;
对于(j=0;j您的代码包含在main()
中定义的所有函数体。这在标准C中是不允许的。一些编译器将其作为扩展提供,但本地函数main::stright\u insert\u int
insidemain()
与自由函数stright\u insert\u int
是不同的实体
这就是为什么会出现链接器错误;您从未定义自由函数stright\u insert\u int
要解决此问题,请将代码结构更改为:
int main()
{
// main's code here
}
void straight_insert_int(int p[])
{
// straight_insert_int's code here
}
void bubblesort_int(int p[])
{
//bubblesort_int's code here
}
等等
如果你使用这样一致的缩进样式,你会发现保持大括号笔直更容易。一些文本编辑器还有一个键命令,如果你在一个大括号上按它,它会将你带到相应的大括号。问题代码大部分都有大括号的缺陷。下面是格式稍微好一点的代码。它编译了一个nd现在链接正确。但是,它没有正确执行。(或者,它可能确实执行了预期的操作?)
在任何情况下,链接器错误(问题的关键)都会得到解决。如果您需要进一步的帮助来找出代码无法正确执行的原因,也许您应该在新问题中发布代码
#include <stdlib.h>
#include <time.h>
//#include <dos.h> non-portable
# define N 30000
void bubblesort_int(int p[]);
void quicksort_int(int left, int right, int p[]);
void straight_select_int(int p[]);
void straight_insert_int(int p[]);
int getUniqueNumber(int *p, int i);
////////////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[])
{
int p[N],pA[N];
int i,j,x;
time_t t0,t1;
for (j=0; j<10; j++)
{
srand(time(0));
} // +++ Added this line.
for(i=0;i<N;i++)
{
p[i]=getUniqueNumber(p,i);
}
for (i=0; i<N; i++)
{
pA[i] = p[i];
}
time(&t0);
straight_select_int(p);
time(&t1);
x=difftime(t1,t0);
for(i=0;i<N;i++)
{
p[i]=pA[i];
}
time(&t0);
straight_insert_int(p);
time(&t1);
x=difftime(t1,t0);
for(i=0;i<N;i++)
{
p[i]=pA[i];
}
for (i=0;i<N;i++)
p[i]=pA[i];
time(&t0);
bubblesort_int(p);
time(&t1);
x=difftime(t1,t0);
for(i=0;i<N;i++)
{
p[i]=pA[i];
}
time(&t0);
quicksort_int(0, N-1, p);
time(&t1);
x=difftime(t1,t0);
// system("PAUSE"); Not needed.
return 0;
// getch(); Non-portable, and also beyond the return code is not executed.
}
////////////////////////////////////////////////////////////////////////////////
void straight_select_int(int p[]) // --- Removed: ';' at the end of this line.
{
int i,j,k,min;
for (i=0; i<N-1; i++)
{
k = i;
min = p[i];
for (j = i+1; j<N; j++)
{
if (p[j] < min)
{
k = j;
min = p[j];
}
}
p[k] = p[i] ;
p[i] = min;
}
return;
}
////////////////////////////////////////////////////////////////////////////////
void straight_insert_int(int p[])
{
int i,j,x;
for (i = 1; i < N; i++)
{
x = p[i];
j = i-1;
while ((x < p[j]) && (j >= 0))
{
p[j+1] = p[j] ;
j = j-1 ;
}
p[j+1] = x ;
}
return;
}
////////////////////////////////////////////////////////////////////////////////
void bubblesort_int(int p[])
{
int i,j,temp;
for (i=1; i<N; i++)
for (j=N-1; j>=i; j--)
if (p[j-1] > p[j])
{
temp = p[j-1];
p[j-1] = p[j] ;
p[j] = temp ;
}
return; // +++ Added this line.
} // +++ Added this line.
////////////////////////////////////////////////////////////////////////////////
void quicksort_int(int left, int right, int p[])
{
int i, j, mid, x, temp;
if(left < right)
{
i = left;
j = right;
mid = (left+right)/2;
x = p[mid];
while (i < j)
{
while (p[i] < x)
i++;
while (p[j] > x)
j--;
if (i < j)
{
if (p[i] == p[j])
{
if (i<mid)
i++;
if (j>mid)
j--;
}
else
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
quicksort_int(left,j-1,p);
quicksort_int(j+1,right,p);
}
return;
}
////////////////////////////////////////////////////////////////////////////////
int getUniqueNumber(int *p, int i)
{
int x,j, found;
do {
x = rand();
found = 0;
j = 0;
while (j<=i && found == 0)
{
if (p[j] == x)
{
found = 1;
}
else
{
j++;
}
}
} while(found == 1);
return x;
}
// --- removed: '}'
// --- removed: '}'
#包括
#包括
//#包括非便携式
#定义N 30000
void bubblesort_int(int p[]);
void quicksort_int(int left,int right,int p[]);
无效直线选择整数(整数p[]);
空直插入(INTP[]);
int getUniqueNumber(int*p,int i);
////////////////////////////////////////////////////////////////////////////////
int main(int argc,char*argv[])
{
int p[N],pA[N];
int i,j,x;
时间t0,t1;
对于(j=0;jIs这一切都在一个文件中?为什么这个被标记为Xcode?你从来没有关闭过main()
。我有点惊讶于这个编译。下面是它编译的原因:void stright\u select\u int(int p[]);
这个原型有一个分号,这很好:void stright\u select\u int(int p[]);
。但向下滚动到实现,您会看到该实现还有分号,这是不好的。请删除该分号。@user3670661,有时就是这样。记住:永恒是一段很长的时间……但不像昨天那么长。