Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ошибки при компиляции...


Автор: Jolyn 26.10.2003, 00:35
Что значит сообщение при компиляции (MS VC++):
"
\mfc\include\afxtempl.h(443) : error C2582: CMyClass:
'operator =' function is unavailable
c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h
(1566) : while compiling class-template member function
'void __thiscall CArray<class CMyClass,class CMyClass&>::SetAtGrow
(int,class CMyClass&)'
"

веь этот поток брани происходит, видимо, в адрес след. строчки:
CArray <CMyClass, CMyClass&> data;
где CMyClass - простой класс, который тоже содержит шаблон (CList).

Подскажите, пожалуйста, где "порылась собака"? confused.gif

Автор: mr.DUDA 26.10.2003, 10:41
При добавлении нового элемента в контейнер MFC, используется не конструктор копирования (как, например в STL), а оператор "=":
Код
// afxtempl.h

template<class TYPE, class ARG_TYPE>
POSITION CList<TYPE, ARG_TYPE>::AddHead(ARG_TYPE newElement)
{
ASSERT_VALID(this);

CNode* pNewNode = NewNode(NULL, m_pNodeHead);
pNewNode->data = newElement;
if (m_pNodeHead != NULL)
 m_pNodeHead->pPrev = pNewNode;
else
 m_pNodeTail = pNewNode;
m_pNodeHead = pNewNode;
return (POSITION) pNewNode;
}

Поэтому необходимо определить оператор присваивания в своём классе:
Код

class  CMyClass
{
     void operator= (CMyClass &ob);
 // .....
};

void CMyClass::operator= (CMyClass &ob)
{
     // ... действия по копированию из "ob" в "this"
}

Вот и всё.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)