Я использую шаблонный класс с членом данных int arr [], и моим шаблонным значением является size_t, чтобы я мог создать массив переменного размера. Когда я пытаюсь создать объект моего класса, я получаю сообщение об ошибке «Ошибка: n1 не может появляться в константном выражении». Я полагаю, что это происходит из-за размера массива, выделяемого во время выполнения, но у меня сложилось впечатление, что шаблонизация решит эту проблему.
Мой интерфейс и конструктор следуют, с моим экземпляром объекта после:
#include "cstdlib"
template<size_t arrSize>
class Sortable_list{
using namespace std;
private:
int myArray [arrSize];
void swap(int* x, int* y); //Swapping auxiliary
int li_partition(int arr[], int low, int high); //Last index partition auxiliary
int rand_partition(int arr[], int low, int high); //Random index partition auxiliary
void merge(int arr[], int l, int m, int n); //Mergesort auxiliary
public:
Sortable_list();
int size();
void clear();
void ip_insertion();
void ip_quicksort(int arr[], int low, int high);
void mergesort(int arr[], int a, int b);
void rand_quicksort(int arr[], int low, int high);
void display();
~Sortable_list();
Sortable_list(const Sortable_list<arrSize> ©);
Sortable_list<arrSize> operator =(const Sortable_list<arrSize> ©);
};
template<size_t arrSize>
Sortable_list<arrSize>::Sortable_list<arrSize>()
{
//seed the random number generator
srand(time(0));
for (int i = 0; i < arrSize - 1; i++)
{
//Gives each index a random value bounded between 0 (inc) and 1000 (non-inc)
myArray[i] = rand() % 1000;
}
}
main.cpp:
#include "Sortable_list.h"
#include "cstdlib"
using namespace std;
int main()
{
size_t n1 = 100;
size_t n2 = 1000;
size_t n3 = 10000;
size_t n4 = 100000;
size_t n5 = 1000000;
Sortable_list<n1>() l1;
Sortable_list<n2>() l2;
Sortable_list<n3>() l3;
Sortable_list<n4>() l4;
Sortable_list<n5>() l5;
}
Далее, мне нужно создать 2 исполняемых файла, а именно PA3-1 и PA3-2, для запуска моего кода.
Мой текущий сборочный файл выглядит следующим образом:
all: Sortable_list
Sortable_list: removal main.o
g++ -o Sortable_list main.o
main.o: main.cpp
g++ -c -g main.cpp
removal:
rm -f *.o
Эта реализация возвращает ошибку:
"Sortable_list.h: в экземпляре void Sortable_list :: clear () [с длинным беззнаковым int arrSize = 1000ul]’:
Sortable_list.h: 257: 11: требуется от ‘Sortable_list :: ~ Sortable_list () [с длинным беззнаковым int arrSize => 1000ul]’
main.cpp: 9: 25: требуется отсюда
Sortable_list.h: 54: 5: предупреждение: удаление массива ‘((Sortable_list <1000ul> *) this) -> Sortable_list <1000ul> :: myArray’ [по умолчанию> включено] "