我正在实现一个基本的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
定义。您需要更正您的声明签名和您尝试的定义之间的差异。