Ошибка gcc в C ++ для оператора = функция - PullRequest
0 голосов
/ 17 марта 2012

определение функции

const circularLinkedList<Tp>& operator=(const circularLinkedList<Tp>& otherList);

строк, которые вызывают ошибку, сообщение об ошибке ссылается на строку 327, которая начинается с nodeType ....

template <class Tp>
nodeType<Tp>* circularLinkedList<Tp>&::operator=(const circularLinkedList<Tp>& otherList)

И сообщения об ошибках от компилятора gcc:

circularLinkedList.h:327: error: invalid declarator before â&â token
circularLinkedList.h:327: error: expected initializer before â&â token

Я предполагаю, что допустил какую-то синтаксическую ошибку в определении этого метода где-то. Как бы мне пришлось исправить это? Благодаря.

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Можете ли вы опубликовать немного больше кода для нас? Можете ли вы объяснить, что такое nodeType?

Следующее выглядит как определение функции:

template <class Tp>
nodeType<Tp>* circularLinkedList<Tp>&::operator=(const circularLinkedList<Tp>& otherList)

Однако, во-первых, в декларации говорится, что возвращается const circularLinkedList<Tp>&. Кроме того, вы не хотите иметь & до ::. Это должно быть имя типа, а не указатель или ссылка на переменную этого типа. Если вы хотите такое поведение, вам нужно использовать прокси-класс.

Так должно быть что-то вроде:

template <class Tp>
const circularLinkedList<Tp>& circularLinkedList<Tp>::operator=(const circularLinkedList<Tp>& other)

Что должно почти неизменно заканчиваться на return *this;

0 голосов
/ 17 марта 2012

В первом блоке кода вы показываете объявление метода, а не определение функции. Во втором блоке кода вы показываете заголовок определения метода.

Объявление метода: Возвращает const circularLinkedList<Tp>&

Определение метода: Возвращает nodeType<Tp>*.

Вы не определяете метод, который вы объявили. Вы определяете метод, который вы не объявили.

Заголовок определения должен быть:

const circularLinkedList<Tp>& circularLinkedList<Tp>::operator=(const circularLinkedList<Tp>& otherList)
...