Search
 
SCRIPT & CODE EXAMPLE
 

CPP

error when using template base class members

template<typename T>
class B {
public:
  void f() { }  // Member of class B<T>
};
template<typename T>
class D : public B<T> {
public:
  void g()
  {
    f();  // Bad (even though some compilers erroneously (temporarily?) accept it)
  }
};

/*************
Q:
Why am I getting errors 
when my template-derived-class uses a member it inherits from its template-base-class?

A:
Within D<T>::g(), the name f does not depend on template parameter T, 
so f is known as a nondependent name. 
On the other hand, B<T> is dependent on template parameter T 
so B<T> is called a dependent name.

Here’s the rule: 
the compiler does not look in dependent base classes (like B<T>) 
when looking up nondependent names (like f).

This doesn’t mean that inheritance doesn’t work. 
Class D<int> is still derived from class B<int>, 
the compiler still lets you implicitly do the is-a conversions (e.g., D<int>* to B<int>*), 
dynamic binding still works when virtual functions are invoked, etc. 
But there is an issue about how names are looked up.

Workarounds:
>>
Change the call from f() to this->f(). 
Since this is always implicitly dependent in a template, 
this->f is dependent and the lookup is therefore deferred 
until the template is actually instantiated, 
at which point all base classes are considered.
>>
Insert using B<T>::f; just prior to calling f().
>>
Change the call from f() to B<T>::f(). 
Note however that this might not give you what you want if f() is virtual, 
since it inhibits the virtual dispatch mechanism.

*************/
Comment

PREVIOUS NEXT
Code Example
Cpp :: online convert c++ code to assembly language 
Cpp :: tutti i tipi di equazioni trigonometriche 
Cpp :: c++ const shared_ptr 
Cpp :: Integer Literrals in C++ Programming 
Cpp :: how to calculate the sum of primary diagonal matrix and secondary diagonal matrix using c++ 
Cpp :: declare a structer in cpp 
Cpp :: online computer graphics compiler c++ 
Cpp :: how to write string in c++ 
Cpp :: Casino Number Guessing Game - C++ 
Cpp :: is palindrom 
Cpp :: c++ array on heap 
Cpp :: function prototype c++ 
Cpp :: declare a variable in cpp 
Cpp :: Fibonacci Series Program. in c++ 
Cpp :: c++ inline if 
Cpp :: c++ environment setup 
Cpp :: Dfs program in c++ 
C :: generate n-bit gray code in c 
C :: get file extension from base64 string 
C :: lewis hamilton 
C :: printf with bool 
C :: find power of a number in c 
C :: Calculator_C 
C :: c 2d array dimensions 
C :: if statement c short form 
C :: tkinter create_line 
C :: How to change an array in a function in c 
C :: initialize array in c with 0 
C :: how to delete virtual hard disk virtualbox 
C :: epoch time in c 
ADD CONTENT
Topic
Content
Source link
Name
2+1 =