I'm trying to implement a mergesort algorithm in c++, however I keep getting the following error:
Error LNK2019 unresolved external symbol "int __cdecl mergeSort<int>(int * const,int,int)" (??$mergeSort@H@@YAHQEAHHH@Z) referenced in function main
I have never gotten this error before. I believe it has something to do with how my functions are set up and the input parameters, but I'm unsure.
Here is my main file:
#include "functions.h"
int main(void) {
int arr[10] = { 97, 9, 41, 32, 65, 63, 0, 19, 56, 26 };
mergeSort(arr, 0, 9);
for (int i = 0; i < 10; i++) {
std::cout << arr[i] << std::endl;
}
return 0;
}
My function header file:
#pragma once
#include <iostream>
#include <string>
template <typename T>
T mergeSort(T arr[], int start, int end);
template <typename T>
T merge(T arr[], int start, int mid, int end);
and my function file:
#include "functions.h"
template <typename T>
T mergeSort(T arr[], int start, int end)
{
if (start < end) {
int mid;
mid = (start + end) / 2; //finds middle
mergeSort(arr, start, mid);
mergeSort(arr, mid + 1, end);
merge(arr, start, mid, end);
}
}
template <typename T>
T merge(T arr[], int start, int mid, int end)
{
int i, j, k, c[50];
i = start;
k = start;
j = mid + 1;
while (i <= mid && j <= end) {
if (arr[i] < arr[j]) {
c[k] = arr[i];
k++;
i++;
}
else {
c[k] = arr[j];
k++;
j++;
}
}
while (i <= mid) {
c[k] = arr[i];
k++;
i++;
}
while (j <= end) {
c[k] = arr[j];
k++;
j++;
}
for (i = start; i < k; i++) {
arr[i] = c[i];
}
}