C++ 调用浮点数组时未定义的引用

C++ 调用浮点数组时未定义的引用,c++,arrays,sorting,C++,Arrays,Sorting,我正在实现一个基本的桶排序算法。main.cpp文件是驱动程序,sort.h存储函数声明,bs.cpp是算法实现 main.cpp case 0: bucketSort(arr, n); break; 排序.h void bucketSort(int* arr, int n); 理学士 #include <iostream> #include <stdlib.h> #include <stdio.h> #include <algorithm>

我正在实现一个基本的桶排序算法。main.cpp文件是驱动程序,sort.h存储函数声明,bs.cpp是算法实现

main.cpp

case 0: bucketSort(arr, n); break;
排序.h

void bucketSort(int* arr, int n);
理学士

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <sort.h>

using namespace std;

// function to sort arr[] of size n using bucket sort
void bucketSort(float arr[], int n)
{
  vector<float> b[n];

  // put elements in different buckets
  for (int i=0; i<n; i++)
  {
    int x = n*arr[i];
    b[x].push_back(arr[i]);
  }

  // sort individual vectors
  for (int i=0; i<n; i++)
  {
    sort(b[i].begin(), b[i].end());
  }

  int index = 0;

  for (int i = 0; i < n; i++)
  {
    while (!b[i].empty())
    {
      arr[index++] = *(b[i].begin());
      b[i].erase(b[i].begin());
    }
  }
}

不确定为什么它返回为未定义。

您在
sort.h
中向前声明
无效bucketSort(int*arr,int n)
,但您从未定义它。而是在
bs.cpp
中定义函数
void bucketSort(float*,int n)


您的代码编译得很好,但链接器最终抱怨无法找到合适的
bucketSort
定义。您需要纠正声明签名与尝试定义之间的差异。

查看您在
sort.h
中的内容,并查看您的实际功能。一直盯着这两个,直到你看到了巨大的,响亮的,引人注目的差异。您真的看不到这两个完全不同的函数声明和定义吗?旁注与您的问题无关:
b[n]
不是一件好事。相反,您可能应该使用嵌套的
std::vector
。有关更多信息,请参阅。
main.o: In function `main':
main.cpp:(.text+0x1d8): undefined reference to `bucketSort(int*, int)'
collect2: error: ld returned 1 exit status
make: *** [main.exe] Error 1