You have a stack that you create that you are working with. You have indicated to the compiler that it has a constructor and the member functions pop and push . The compiler took note of this.
You used all three in the program. The compiler did not object - you declared that they are (will be), he compiled, writing something like (in human language) - "linker, then the stack::pop function call, take it yourself you know where and turn it around. "
Linker is happy to try. He searches for these functions everywhere — in every file that is passed to him for linking (but you only passed one, with the given text), in libraries — but he finds nothing. Because you did not bother to write definitions ( implementations ) of these functions. And no one knows what you wanted to write in them - maybe the pop function should display a cartoon ... And neither the compiler nor the linker are accustomed to do anything without a command.
Well, the linker complains about the absence of your functions, how he can - that (in translation) met an unresolved symbol, which is referenced in the main function ...
mainnot in class ... - Harry