Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2011, 21:51   #1
MasterSporta
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 56
По умолчанию Шаблоны и дружественность

Всем здравствуйте!
Помогите разобраться в следующем: создаю шаблонный и класс и в определении этого класса делаю ему дружественным другой шаблонный класс, но компилятор обнаруживает ошибки, которые я не пойму чем заключаются.
Вот код:
Код:
#ifndef LISTND_H
#define LISTND_H

template <class T>
class ListNode
{
	friend class List<T>;
public:
	ListNode(const T &);
	T getData() const;

private:
	T data;
	ListNode<T> *nextPtr;
};

template <class T>
ListNode<T>::ListNode(const T &value)
{
	data = value;
	nextPtr = 0;
}

template <class T>
T ListNode<T>::getData() const
{
	return data;
}

#endif
Всем заранее большое спасибо!!!

Оформляйте свой код тегом [code]

Последний раз редактировалось ACE Valery; 28.05.2011 в 12:12.
MasterSporta вне форума Ответить с цитированием
Старый 27.05.2011, 22:41   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

У меня все работает. А вы class List<T> подключили?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 27.05.2011, 22:44   #3
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Как говорится, экстрасенсы в отпуске.
Какие ошибки? В каком месте?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 28.05.2011, 13:36   #4
MasterSporta
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 56
По умолчанию

к примеру, компилятору не нравится объявление дружественного класса List<T>
error C2059: syntax error : '<'
Вот еще пару ошибок:
error C2989: 'List' : class template has already been declared as a non-class template
error C3857: 'List': multiple template parameter lists are not allowed
error C2039: 'isEmpty' : is not a member of '`global namespace''
MasterSporta вне форума Ответить с цитированием
Старый 28.05.2011, 13:37   #5
MasterSporta
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 56
По умолчанию

Код:
#ifndef LIST_H
#define LIST_H

#include "listnd.h"
#include <iostream>
#include <assert.h>
using namespace std;

template <class T>
class List
{
public:
	List();
	void insertAtFront(const T &);

	int isEmpty() const;

private:
	ListNode<T> *firstPtr;
	ListNode<T> *lastPtr;
	ListNode<T> *getNewNode(const T &);
};

template <class T>
List<T>::List()
{
	firstPtr = lastPtr = 0;
}

template <class T>
int List<T>::isEmpty() const
{
	return firstPtr == 0;
}

template <class T>
ListNode<T> *List<T>::getNewNode(const T &value)
{
	ListNode<T> *ptr = new ListNode<T>(value);
	assert(ptr != 0);
	return ptr;
}

template <class T>
void List<T>::insertAtFront(const T &value)
{
	ListNode<T> *newPtr = getNewNode(value);

	if(isEmpty())
		firstPtr = lastPtr = newPtr;
	else
	{
		newPtr->nextPtr = firstPtr;
		firstPtr = newPtr;
	}
}

#endif
Вот определение класса List<T>
MasterSporta вне форума Ответить с цитированием
Старый 29.05.2011, 14:52   #6
MasterSporta
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 56
По умолчанию

пересмотрел еще раз, в реализации ошибок нет. Ошибка выскакивает, когда я подключаю "list.h" в срр-файл:
error C2989: 'List' : class template has already been declared as a non-class template
MasterSporta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблоны Romario92 C++ Builder 2 18.04.2011 19:46
Шаблоны С++ Secc Помощь студентам 4 27.12.2009 17:35
Шаблоны C++ Viamy Помощь студентам 0 27.12.2009 16:10
Шаблоны, Си++ Нataша Помощь студентам 1 11.12.2009 01:35
Шаблоны bondik Общие вопросы C/C++ 10 04.05.2008 09:50