On Jun 29, 10:26 am, Rolf Magnus <ramag...@t-online.de> wrote:
Peskov Dmitry wrote:
It is a very basic question.Surely i got something wrong in my basic
understanding.
//Contents of file1.cpp
using namespace std;
#include <iostream>
template <typename T>
class my_stack;
int main(){
my_stack<int> st1;
int top_element;
top_element = st1.pop();
cout << "Hello World !! Top = " << top_element << endl;
return 0;
}
The class my_stack is defined in another file.
It's not a class. It's a class template.
say (template.cpp)
file.o template.o -> project
why does it give linker error, since i provided the class
definition while linking too !!!
A class template is not a class. It's a description for the
compiler that tells it how to build the class once it knows
the template arguments. But for that, the compiler must know
the template's definition, not just a declaration.
But that doesn't really change anything here. The statement
template< typename T > class my_stack ;
is a declaration, not a definition. The same would be true
without the "template< typename T >" (although it would declare
a class, rather than a class template).
Certain uses require a definition; a simple declaration is not
sufficient. Instantiating a template is one, and defining a
variable with a given type is another. Since he does both in
main, a definition must be available, and he's not made one
available.
--
James Kanze (GABI Software) email:james.ka...@gma=
Because if i include (b) in my code as this one it works.