C程序获取链接器错误。我真的能';我看不出是什么';这是不对的

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

我的密码有问题。我正在使用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

不管怎样,这是我的密码:

#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
inside
main()
与自由函数
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,有时就是这样。记住:永恒是一段很长的时间……但不像昨天那么长。