Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание класса с шаблоном внутри / 3 сообщений из 3, страница 1 из 1
23.08.2006, 10:20
    #33936540
дед Макар
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание класса с шаблоном внутри
Вот значит такая закавыка. С шаблонами я как-то не очень силен, нахожусь пока на этапе умения их использовать. Но тут такой вопрос.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class classJob
{
public:
	int a;
	int b;
	CString c;
};

map<int, classJob> mClass;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode =  0 ;

	classJob cJob;
	cJob.a =  13 ;
	cJob.b =  65 ;
	cJob.c = "aaaa";
	mClass.insert(pair<int, classJob> ( 1 , cJob));

	return nRetCode;
}

Работает отлично. Но стоит описать класс classJob как
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class classJob
{
public:
	int a;
	int b;
	CString c;
	CList<int> list;
};

как тут же вылетаю с ошибкой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
d:\microsoft visual studio  8 \vc\atlmfc\include\afxtempl.h( 781 ) : error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
        d:\microsoft visual studio  8 \vc\atlmfc\include\afx.h( 553 ) : see declaration of 'CObject::CObject'
        d:\microsoft visual studio  8 \vc\atlmfc\include\afx.h( 524 ) : see declaration of 'CObject'
        This diagnostic occurred in the compiler generated function 'CList<TYPE>::CList(const CList<TYPE> &)'
        with
        [
            TYPE=int
        ]

VS 2005. Что бы это?
...
Рейтинг: 0 / 0
23.08.2006, 14:17
    #33937597
TopSpace
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание класса с шаблоном внутри
может у листа нет default-конструктора?
...
Рейтинг: 0 / 0
26.02.2007, 17:03
    #34355586
Albatross
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание класса с шаблоном внутри
всё правильно, потому что:

В выражении

mClass.insert(pair<int, classJob> (1, cJob));


необходим запуск конструктора копирования classJob

если ты определяешь его как

class classJob
{
public:
int a;
int b;
CString c;
CList<int> list;
};


то нужен конструктор копирования для CList, который отнаследован от CObject и является protected, то есть тебе недоступным.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание класса с шаблоном внутри / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]