C++ — ошибка компиляции в домашнем задании по дереву: ошибка: ожидаемый конструктор, деструктор или преобразование типа перед токеном «*»

В настоящее время я пытаюсь сделать домашнее задание и сначала пытаюсь скомпилировать свои вещи (заголовки классов в файле .h и пустые определения в файле .inl (я использую шаблон имени типа) ).

Я получаю эту ошибку:

error: expected constructor, destructor, or type conversion before ‘*’ token

Вот мой файл .h: http://ideone.com/dm3Bp

Вот мой файл .inl: http://ideone.com/5FBep

Я пытаюсь создать узел (в этих файлах он называется Noeud) в конце файла .inl. видимо, я не могу взять значение из массива данных типа E...

Ошибка прямо перед определением метода:

Noeud * Arbre<E>::_auxPereSym(E *tabS, int debut, int fin, E **ptr, int &card) throw (std::bad_alloc)

Я читал в других темах, что возвращаемый тип должен быть Arbre‹ E >::Noeud Поскольку Noeud является вложенной структурой моего класса Arbre... Но, к сожалению, я не могу изменить заголовочный файл...

Есть предположения?

Спасибо за ваше время и помощь.

Примечание: Дайте мне знать, если для чего-то нужен перевод, это домашнее задание по французскому языку.


person Pacane    schedule 17.11.2010    source источник


Ответы (1)


Попробуйте определить это при определении в файле .inl (а не в заголовочном файле, как вам кажется).

Тип возвращаемого значения необходимо искать в соответствующей области видимости.

МОЗГ СОСТАВЛЯЕТ КОД ВПЕРЕДИ

template<typename E>
typename Arbre<E>::Noeud * Arbre<E>::_auxPereSym(E *tabS, int debut, int fin, E **ptr, int &card) throw (std::bad_alloc)

РЕДАКТИРОВАТЬ2:

измените оператор возврата в функции-члене следующим образом:

return new typename Arbre<E>::Noeud(tabS[0]);
person Chubsdad    schedule 17.11.2010
comment
Я попытался это сделать, и теперь у меня есть другая ошибка, которая может быть не связана, но она говорит: ../BST.h: В конструкторе 'Arbre_Lab8::Arbre‹E›::Noeud::Noeud(const E&) [ с E = int]': ../BST.inl:78: создается из 'Arbre_Lab8::Arbre‹E›::Noeud* Arbre_Lab8::Arbre‹E›::_auxPereSym(E*, int, int, E* *, int&) [с E = int]' ../BST.inl:28: создается из 'Arbre_Lab8::Arbre‹E›::Arbre(E*, int, int, E**, int&) [с E = интервал]' - person Pacane; 17.11.2010
comment
@Pacane: я только что закомментировал тело функции (а не определение) 'void Arbre‹E›::_auxPreOrdre(Noeud* noeud, void(* traitement)(E&)) const ', и код отлично компилируется на IdeOne и Комо. - person Chubsdad; 17.11.2010
comment
что случилось с функцией 'Noeud* Arbre‹E›::_auxPereSym(...)'? Поскольку я пытался закомментировать «void ..._auxPreOrdre(...)», но все еще получаю сообщение об ошибке при создании экземпляра узла из _auxPereSym (как бы вы его создали, просто чтобы убедиться?, я попробовал «вернуть новый typename Arbre‹E›::Noeud(tabS[0]);') Не могли бы вы объяснить, почему я должен указывать все эти имена типов, когда упоминаю об этом перед определением функции? Кстати, спасибо за помощь. - person Pacane; 17.11.2010