I would like to ask 2 question about this code. Where I just try to simulate a stack.
Stack.h
 #pragma once
namespace stackandqueue {
    class Stack
    {
    private:
        int index;
        int *stackdata;
    public:     
        Stack();    
        ~Stack();
        void push(int val);
        int pop();
        int top();
        bool isEmpty();
    };
}
Stack.cpp
#include "stdafx.h"
#include "Stack.h"
namespace stackandqueue {
        Stack::Stack() : index{ 0 }
        {
            stackdata = new int[index];
        }
        Stack::~Stack()
        {
            delete[] &stackdata;
        }
        void Stack::push(int val) {
            stackdata[index] = val;
            index++;
        }
        int Stack::pop() {
            int val = stackdata[index];
            index--;
            return val;
        }
        int Stack::top() {
            return stackdata[index];
        }
        bool Stack::isEmpty() {
            return index == 0;
        }
}
Meaning is to let me create
 Stack stack;
And then it initilizes a dynamic array with 0 as first index and that let me push, pop, top values.
First question: Why am I having unresolved symbols for method definitions?
Second question: About 'stackdata', you find is the right way if I want to declare an "array" with dynamic size for this behaviour?
I'm open for improvements and best practices. Im used to programming languagesbut I've never delved into c ++ and I don't want to have bad practices. So you see I am taking it from the begining.
Thanks.
I post solution reached with your help that maybe helps someone.
class Stack
    {
    private:
        int index;
        int* stackdata;
    public:     
        Stack(int size);    
        ~Stack();
        void push(int val);
        int pop();
        int top();
        bool isEmpty();
    };
    Stack::Stack(int size) 
        : index {0}, stackdata{new int[size]} 
        {
        }
        Stack::~Stack()
        {
            delete[] stackdata;
        }
        void Stack::push(int val) {
            stackdata[index] = val;
            index++;
        }
        int Stack::pop() {
            index--;
            return stackdata[index];
        }
        int Stack::top() {
            return stackdata[index-1];
        }
        bool Stack::isEmpty() {
            return index == 0;
        }
 
    