You receive a link error when you build an application that contains a base class in Visual C++

Article translations Article translations
Article ID: 130486 - View products that this article applies to.
This article was previously published under Q130486
This article has been archived. It is offered "as is" and will no longer be updated.
Expand all | Collapse all

On This Page

SYMPTOMS

When building an application that contains a base class with a pure virtual operator= function and a class derived from the base class with a defined operator= function, a following link error is generated for the base class's operator=:
error LNK2001: unresolved external symbol
This also occurs if the classes reside in a DLL and are declared with the __declspec( dllexport ) storage-class attribute.

In Visual C++ .NET you will receive the following error message:
LNK2019: unresolved external symbol

CAUSE

This behavior is by design. The assignment operator is not inherited. Normal inheritance rules do not apply, and declaring it pure virtual does not have the usual affect.

RESOLUTION

Since operator= is not inherited, any declaration of operator= in the base class is unused and unnecessary. Do not declare the operator= in the base class.

MORE INFORMATION

When built, the following code sample will generate the discussed LNK2001 error. Comment the declaration of the operator=() member in the base class to resolve.

Sample Code

/* Compile options needed: none
*/ 

class A
{
public :
   // To workaround LNK2001, comment the following line.
   virtual const A& operator=( const A& f ) = 0;
};

class B : public A
{
public :
   const A& operator=( const A& g ) {return g;}
};

B aB1, aB2;

void main( void )
{
   aB2 = aB1;
}
				

Properties

Article ID: 130486 - Last Review: February 23, 2014 - Revision: 4.0
APPLIES TO
  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ 2005 Express Edition
Keywords: 
kbnosurvey kbarchive kberrmsg kbtshoot kbprb kbcpponly kbcompiler KB130486

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com