Ошибки компиляции с шаблонами и операторами new / delete (C ++) - PullRequest
0 голосов
/ 18 января 2011

Я пытаюсь создать класс vector -style и для использования шаблонов, а также операторов new, delete у меня есть этот фрагмент кода:

template <class type2> class storage
{
         private:
                 type2 *organs;
         public:
                int num;
                storage(); //constructor
                ~storage(); //destructor
                void operator+(type2 newone);
                void operator-(int howmany);
                type2 operator[](int place);
};


storage<class type2>:: ~storage()
{
          delete[] organs; //~~~~~~~Error number 1~~~~~~~~~~
}

void storage<class type2>:: operator+(type2 newone)
{ //                        ~~~~~~~~~~~Error number 2~~~~~~~~~~~~~~
     organs = new type2[1];
     num++;
     oragns[num-1] = newone;
}

Компилятор (Dev C ++) записывает эту ошибку на Ошибка номер 1:

недопустимое использование неопределенного типа `struct типа2'

И эта ошибка при ошибке № 2:

`newone 'имеет неполный тип

Однако я не понимаю, в чем дело. Есть намеки?

Ответы [ 2 ]

5 голосов
/ 18 января 2011

Вам необходимо указать, какой шаблон вы используете для этих методов, или переместить реализацию функции в класс.

template <class type2>
storage<class type2>:: ~storage()
{
      delete[] organs;
}

Наверное, самое простое решение. То же самое должно работать и для вашей второй ошибки.

EDIT:

Нашел хороший учебник по шаблонам, который охватывает это, между прочим.

http://www.cplusplus.com/doc/tutorial/templates/

0 голосов
/ 18 января 2011

В этом коде есть серьезные ошибки, кроме ошибки компиляции.

  • Абсолютно неверная подпись для оператора +.Вы можете использовать оператор + = в качестве приложения, что, вероятно, является тем, что вы делаете.Вы, вероятно, должны вернуть ссылку на себя.
  • operator-, а также, возможно, make operator - =
  • Если оператор + должен добавить, вы этого не делаете.Вы просто выделяете новый элемент, теряя все, что у вас было раньше, без возможности его восстановления, т. Е. В памяти нет указателей, указывающих на него, и вы не можете его удалить.обрабатывать копирование и присваивание
  • Оператор [] в идеале должен иметь 2 перегрузки, одну постоянную и одну неконстантную.Если вы действительно хотите вернуть по значению, вы, вероятно, должны сделать его постоянным.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...