I have following template code:
class ClassName{};
template <class T>
class TemplatePtr
{
public:
void operator=(T* p)
{
}
};
class TemplatePtr_ClassName: public TemplateePtr<ClassName>
{
public:
~TempaltePtr_ClassName();
};
void Test()
{
TemplatePtr_ClassName data;
data = new ClassName;
}
but compile fails with error message (VS2008):
error C2679: binary '=' : no operator found which takes a right-hand operand of type >>'ClassName *' (or there is no acceptable conversion)
Why it won't work as I have defined an operator in the template base class?
It gets inherited. However, the compiler-generated assignment operator for TempaltePtr_ClassName
hides the inherited operator. You can make it visible by adding
using TempaltePtr<ClassName>::operator=;
to your derived class.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With