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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2012, 01:23   #1
Asya1994
Новичок
Джуниор
 
Регистрация: 09.12.2012
Сообщений: 3
По умолчанию Вложенный класс в шаблон. Указатель на вложенный класс в возвращаемом значении метода шаблона. Что делать?

код будет ниже

Последний раз редактировалось Asya1994; 09.12.2012 в 01:34. Причина: Неправильная формулировка
Asya1994 вне форума Ответить с цитированием
Старый 09.12.2012, 01:31   #2
Asya1994
Новичок
Джуниор
 
Регистрация: 09.12.2012
Сообщений: 3
По умолчанию Внутренний класс шаблона.

template <class D> class List
{
protected: //создавать отдельно узел от списка пусть нельзя.
class Node
{
public:
Node *next;
D value;
Node(D value=0);
void PrintValue();
};

Node* begin;
Node* end;

public:
List();
Node* Go(D value,int c);
void Add(D value);
void Remove(D value);
Node* FindNode (D value);
void SetValue(D value, D newvalue);
int SizeList();
void Print();
};


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

template <class D> List<D>::Node::Node(D value)
{
this->value=value;
this->next=NULL;
};

template <class D> List<D>::List()
{
this->begin=NULL;
this->end=NULL;
};

template <class D> void List<D>::Add(D value)
{
Node* node= new Node(value);
if(begin==NULL)
{
begin=node;
end=node;
node->next=0;
}
else
{
end->next=node;
end=node;
}
};

template <class D>
Node* List<D>::FindNode(D value) //ЗДЕСЬ ЕМУ СОВЕРШЕННО НЕ НРАВИТСЯ ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ. что делать?
{
Node *buf=begin;
while((buf->value!=value)&&(buf!=NULL))
buf=buf.next;
if(buf!=NULL)
return buf;
else
{
cout<<"Invalid value"<<endl;
return 0;
}
};

template <class D> void List<D>::Remove(D value)
{
if(Node* node=FindNode(value))
{
if(begin==NULL) cout<<"There are no members to remove"<<endl;
else if ((node==begin)&&(node==end))
{
begin=NULL;
end=NULL;
delete node;
cout<<"Your List has no members"<<endl;
}
else
{
Node* buf=begin;
Node* buf2;
while(buf!=node)
{
buf2=buf;
buf=buf->next;
}
buf2->next=buf->next;
buf->next=NULL;
delete buf;
}
}
}

template <class D> void List <D>::SetValue(D value, D newvalue)
{
if(Node* buf=FindNode(value))
buf->value=newvalue;
};


/*template <class D> Node* List<D>::Go(D value, int c)
{
if(Node* buf=FindNode(value))
{
int i=0;
while((buf.next!=0)&&(i!=c))
{
buf=buf.next;
i++;
}
if(i!=c)
cout<<"There is less members in a List"<<endl;
else
return buf;
}
}; */

template <class D> int List<D>::SizeList()
{
int i=0;
Node* buf=begin;
while(buf!=end)
{
buf=buf->next;
i++;
}

};

template <class D> void List<D>::Print()
{
Node* buf=begin;
while(buf!=end->next)
{
cout<<(*buf).value<<"\32";
buf=buf->next;
}

};



void main()
{
int count;
List <int> LinkedList;
cout<<"Skolko uzlov vi hotite"<<endl;
cin>>count;
for (int i=0;i<count;i++)
{
int value;
cout<<"Vvedite value:"<<endl;
cin>>value;
LinkedList.Add(value);
}
LinkedList.Print();

LinkedList.SetValue(count, 10);
LinkedList.Print();


getchar();
getchar();
}

При компиляции выдает вот что:
Ошибка 1 error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
Ошибка 2 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
Ошибка 3 error C2065: D: необъявленный идентификатор
Ошибка 4 error C2065: D: необъявленный идентификатор
Ошибка 5 error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "value"
Asya1994 вне форума Ответить с цитированием
Старый 09.12.2012, 01:41   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Собственно, а почему он ему должен нравится? Ведь Node фактически шаблонный класс со всеми вытекающими...
p51x на форуме Ответить с цитированием
Старый 09.12.2012, 01:43   #4
Asya1994
Новичок
Джуниор
 
Регистрация: 09.12.2012
Сообщений: 3
По умолчанию

Ну Node не шаблонный,а вложенный, как бы класс внутри шаблона...
Хочу добиться от компилятора: где ошибка, уже качаю новую студию по блондинистости, может там прокатит?)
Asya1994 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
не создается указатель на класс CodeNOT Общие вопросы C/C++ 4 04.01.2011 12:10
Указатель на абстрактный класс zhenya.ya Общие вопросы C/C++ 0 11.11.2010 23:51
Указатель на класс Колючка* Общие вопросы Delphi 8 21.01.2010 07:38
Вопрос о возвращаемом из пользовательской функции значении motorway Microsoft Office Excel 4 14.07.2009 16:22