Получение "x не может появляться в константном выражении" и makefile - PullRequest
0 голосов
/ 19 ноября 2018

Я использую шаблонный класс с членом данных 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> &copy);
Sortable_list<arrSize> operator =(const Sortable_list<arrSize> &copy);
};

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’ [по умолчанию> включено] "

...