Когда я создаю динамический массив c с пользовательским типом, даже со строками, он не работает - PullRequest
0 голосов
/ 10 февраля 2020

Я тренируюсь, чтобы кодировать более сложный проект, который требует реализации бинарного дерева поиска. Моя работа заставила меня сосредоточиться на пользовательских типах и шаблонах. Теперь моя идея заключалась в том, чтобы создать собственный массив типов, который был бы настроен на прием элементов любого типа. Я даже включил итератор, просто чтобы проверить, как он работает. Затем я создал собственный класс MyPairs (поскольку BST принимает пары {ключ, значение}). Дело в том, что когда я пытаюсь реализовать массив такого типа, я получаю сообщения об ошибках типа std :: bad_array_new_lenght или std :: bad_allo c. Я уверен, что все это вызвано инициализацией массива dinami c, но я не могу понять, в чем проблема. Иногда код не работает даже для типа int. Что я делаю не так? Я сообщаю код, который я сделал. Вы можете найти больше комментариев о том, что я пытался сделать.


template<typename T>
class array{     //third custom type, a regular array that is created in the heap

T* start;
std::size_t size;
const int dimension = 10;//i decided, to simplify things to fix the array dimension

public:
array()
:start{new T[dimension]}, size{0} {}////////////////HERE SEEMS TO BE THE PROBLEM



~array()
{
std::cout<<"Destructor Called"<<std::endl;
delete[] start;
}


MyIterator<T> insert(T item){
if (size == dimension-1)
    throw TooFullException{"Array is too small"};
start[size] = item;
MyIterator<T> x{start+size};
++size;
std::cout<<"size:"<<size<<std::endl;
return x;
}

MyIterator<T> begin(){
MyIterator<T> x{start};
return x;
}

MyIterator<T> end(){
MyIterator<T> x{start+size};
return x;
}


friend
std::ostream& operator<<(std::ostream& os, array& x)//printing the array
{
for(MyIterator<T> i = x.begin(); i != x.end(); ++i)
    os<<*i<<" ";
os<<std::endl;
return os;
}

РЕДАКТИРОВАТЬ: Я ограничил код, чтобы теперь вы могли видеть, где ошибка

1 Ответ

0 голосов
/ 10 февраля 2020

Я нашел, что кто-то ответил на мой вопрос. Так как они удалили сообщение (я не знаю почему, так как это было правильно и полезно), я сообщу об этом здесь. В конце концов мне просто пришлось переупорядочить элементы класса List в соответствии с порядком инициализации.

class array{     

const int dimension = 10;//i decided, to simplify things to fix the array dimension
T* start;
std::size_t size;

public:
array()
:start{new T[dimension]}, size{0} {}//Now this works
 ...  

Теперь это работает! Спасибо тому, кто первым опубликовал ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...