C++ 调用浮点数组时未定义的引用
我正在实现一个基本的桶排序算法。main.cpp文件是驱动程序,sort.h存储函数声明,bs.cpp是算法实现 main.cppC++ 调用浮点数组时未定义的引用,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>
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