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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2010, 19:14   #1
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
Сообщение Шаблоны не подружились со вложенными классами...

Возникли проблемы с доступом ко вложенному классу для возврата обьекта этого типа из встроенной функции шаблона включающего класса.
То есть, если предположить, что у нас определен включающий класс sum и его вложенный класс socket, то вот это:
Код:
#include <iostream>

template <class type>
class sum
{
public:
	class socket
	{
	public:
		int a;
	};
	socket return_a(void) const;
};

template <class type>
sum<type>::socket sum<type>::return_a(void) const
{
	socket mysocket;
	return mysocket;
}

int main()
{
	return 0;
}
не работает. Выдает такие ошибки:
Код:
Warning 1 warning C4346: 'sum<type>::socket' : dependent name is not a typec: c\visual
c++\inline_template_include_class_function\inline_template_include_class_function\main.cpp 16

Error   2 error C2143: syntax error : missing ';' before 'sum<type>::return_a' c:\visual
c++\inline_template_include_class_function\inline_template_include_class_function\main.cpp 16

Error   3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\visual
c++\inline_template_include_class_function\inline_template_include_class_function\main.cpp 16

Error   4 fatal error C1903: unable to recover from previous error(s); stopping compilation c:\visual
c++\inline_template_include_class_function\inline_template_include_class_function\main.cpp 16
Чего тут не хватает, или что лишнее?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 11.05.2010, 21:49   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
#include <iostream>

template <class type>
class sum
{
public:
	class socket
	{
	public:
		int a;
	};
	socket return_a(void) const;
};

template <class type>
typename sum<type>::socket sum<type>::return_a(void) const
{
	socket mysocket;
	return mysocket;
}

int main()
{
	return 0;
}
если идентификатор в шаблоне является ТИПОМ, то перед ним нужно писать typename. Без этого указания идентификатор socket интерпретировался бы как статический член класса, т.е как конкретный объект.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 12.05.2010, 19:40   #3
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Спасибо, теперь работает.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос с классами. Вадим Буренков Общие вопросы Delphi 11 13.07.2009 10:57
НУЖНА ПОМОЩЬ "Программирование алгоритмов с вложенными арифметическими циклами при работе с матрицами" krolya838 Паскаль, Turbo Pascal, PascalABC.NET 0 02.06.2009 17:29
Проблема с вложенными записями Tesmont Общие вопросы C/C++ 4 12.05.2009 23:02
Задача на Паскаль с вложенными Impario Помощь студентам 7 29.12.2008 16:14