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



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

main.cpp

case 0: bucketSort(arr, n); break;

排序.h

void bucketSort(int* arr, int n);

bs.cpp

#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());
}
}
}

当我编译时,我收到错误:

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

不确定为什么它会以未定义的形式返回。

您在sort.h中正向声明void bucketSort(int* arr, int n),但从未定义它。相反,在bs.cpp中,您定义了函数void bucketSort(float*, int n)

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

最新更新