申し訳ありませんが、例がないので、ここで実際のコードを調べる必要があります。何が起こるかというと、クラスがありますCItemElem
(これは古いソースであることに注意してください。ハンガリー語表記、クラス名などは考慮しないでください..)。以下の例のように、私は同じことをしようとしていますCItemElem
class A
{
public:
int value;
};
int _tmain( int argc, _TCHAR* argv[] )
{
std::vector<A> hold;
A a;
hold.push_back(a);
}
クラスCItemElem
を使用しようとすると、コンパイラーは C2679 を返しますが
vector<CItemElem>hold;
CItemElem item;
hold.push_back(item);
Error C2679: '=' binary :no operator found which takes a right-hand operand of type 'const CItemElem' (or there is no acceptable conversion)
エラーをクリックすると、*_First = _Val;
この関数のこの行に移動しますxutility
template<class _FwdIt,
class _Ty> inline
void fill(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
{ // copy _Val through [_First, _Last)
for (; _First != _Last; ++_First)
*_First = _Val;
}
CItemElem クラスは長すぎて派生しているため、ここに巨大なコードを貼り付けるのではなく、pastebin にアップロードすることにしました。 Pastebin: クラス CItemElem ヘッダー (item.h)
CItemElem は CItemBase から派生し、オーバーロードされた = 演算子を持ち、これも CItemBase = 演算子を通過することに注意してください。これはからitem.cpp
です:
CItemElem& CItemElem::operator =( CItemElem & ie )
{
CItemBase::operator =( ie );