Неразрешенный внешний элемент

Всем здравствуйте,задача такая: организовать класс множество(MySet) на основе класса вектор(MyVector)и организовать корректное выполнение всего,что есть в фуннкции main().Ещё все классы должны быть шаблонными.Возникает такая ошибка введите сюда описание изображения,уже сто раз все посмотрела,помогите,пожалуйста

Файл MyVector.h

#pragma once
#ifndef MYVECTOR_H
#define MYVECTOR_H
#include <iostream>
using namespace std;

const int MAX_SIZE = 5;

template<class INF>
class MyVector
{
public:
    MyVector( INF el, int maxsz);//конструктор с двумя параметром
    MyVector();//конструктор по умолчанию
    MyVector( INF el);
    MyVector(const MyVector& v);//конструктор копирования
    ~MyVector()// деструктор
    {
        delete[] pdata;//освобождаем саму память
    };

    void add_element( INF el);// функция добавления элемента в конец вектора
    void delete_element(int i);//функция удаления элемента из произвольного места

    INF&  operator[](int i)const;


    int Size() { return size; }
    int Maxsize() { return maxsize; }

    int find(INF el);

    MyVector<INF>& operator=(const MyVector<INF> & v)
    {
        this->maxsize = v.maxsize;
        this->size = v.size;
        pdata = new INF[maxsize];
        for (int i = 0; i < v.size; i++)
        {
            this->pdata[i] = v.pdata[i];
        }
        return *this;
    }

    friend ostream& operator<<(ostream& out, MyVector& v)
    {
        for (int i = 0; i < v.size; ++i)
            out << v.pdata[i] << ' ';
        out << endl;
        return out;
    }

protected:
    int maxsize;// размер вектора
    int size;// количество элементов в векторе
    INF * pdata;

private:
    void resize();
};

#endif

Файл MyVector.cpp

#include<vector>
#include "MyVector.h"


//создание конструктора с одним параметром (символьная строка)для создания мн-ва размером 1 и имеетзначения по умолчанию
template<class INF>
MyVector<INF>::MyVector( INF el, int maxsz)
{
    maxsize = maxsz;//размер вектора равен переданному значению
    pdata = new INF[maxsz];//char **pdata указатель, содержащий адрес динамического массива элементов(строк).
    size = 1;//количество элементов в векторе
    pdata[0] = new char[strlen(el) + 1];//выделяем динамическую память под строку
    strcpy_s(pdata[0],strlen(el)+1, el);// копируем(куда,что)
}

template<class INF>
MyVector<INF>::MyVector()//конструктор по умолчанию
{
    pdata = NULL;
    size = 0;
    maxsize = 0;
}

template<class INF>
MyVector<INF>::MyVector(INF el)//конструктор с одним параметром
{
    maxsize = 5;
    pdata =new INF[maxsize];
    pdata[size] = el;
    size++;
}
template<class INF>
MyVector<INF>::MyVector(const MyVector& v)//конструктор копирования
{
    /*maxsize = v.maxsize;
    size = v.size;
    pdata =new INF[maxsize];//выделяем память под динамический массив
    for (int i = 0; i < size; ++i)//выделяем память под каждую строчку и копируем туда
    {
        pdata[i] = new INF[strlen(v.pdata[i]) + 1];
        strcpy_s(pdata[i], v.pdata[i]);
    }*/
    this->maxsize = v.maxsize;
    this->size = v.size;
    INF* temp = new INF[this->maxsize];
    for (int i = 0; i < v.size; i++)
    {
        temp[i] = v.pdata[i];
    }
    this->pdata = temp;
}

template<class INF>
void MyVector<INF>::resize()//функция работает в при добавленни и удалении элемента
{
    if (size == maxsize)//добавление элемента
        maxsize = size * 15 / 10;
    else
        maxsize = size * 10 / 15;//удаление элемента
    INF* temp =new INF[maxsize];//создаем промежуточный вектор
    for (int i = 0; i < size; ++i)//копируем в него всё что есть в pdata
    {
        temp[i] = pdata[i];
    }
    delete[] pdata;
    pdata = temp;//переадресация
}

template<class INF>
void MyVector<INF>::add_element(INF el)//вставка элемента в конец вектора
{
    /*if (size == maxsize)
        resize();// функция изменения размера вектора maxsize при его переполнении или освобождении места
    pdata[size] = new INF[strlen(el) + 1];//выделяем память под строчку
    strcpy_s(pdata[size], el);
    size++;*/
    if (size == maxsize)
    {
        if (maxsize == 0)
            maxsize = 1;
        else
            maxsize *= 2;

        INF* temp = new INF[maxsize];
        for (int i = 0; i < size; i++)
        {
            temp[i] = pdata[i];
        }
        delete[]pdata;
        pdata = temp;
    }
    pdata[size] = el;
    size++;
}

template<class INF>
void MyVector<INF>::delete_element(int i)
{
    if (size - 1 < maxsize / 2)
    {
        maxsize = maxsize * 10 / 15;
        INF* temp = new INF[maxsize];//создаем промежуточный вектор
        for (int i = 0; i < size; ++i)//копируем в него всё что есть в pdata
        {
            temp[i] = pdata[i];
        }
        for (int x = i; x < size - 1; ++x)//удаляем элементы по индексу и перенесоим остальные
        {
            temp[i] = temp[i + 1];
        }
        delete[] pdata;
        pdata = temp;
    }
    else
        for (int x = i ; x < size - 1; ++x)
        {
            pdata[i] = pdata[i + 1];
        }
    size--;
}

template<class INF>
INF& MyVector<INF>::operator[](int i)const
{
    return pdata[i];
}


template<class INF>
int MyVector<INF>::find(INF el)
{
    for (int i = 0; i < size; ++i)
    {
        if (el == pdata[i])
            return i;
    }
    return -1;
}

Файл MySet.h

#pragma once
#ifndef MYSET_H
#define MYSET_H
#include <iostream>
#include<string>
#include<vector>
#include "MyVector.h"
#include "MyVector.cpp"
using namespace std;


template<class INF>
class MySet :public MyVector<INF>
{
public:
    MySet( INF el ) :MyVector<INF>(el) {};//конструктор с одним параметром
    MySet() :MyVector<INF>() {};//конструктор по умолчанию


    friend MySet operator+(MySet& s1, MySet& s2)//объединение двух множеств
    {
        MySet<INF> sum;//создание третьего множества(область объединения)
        for (int i = 0; i < sum.size; ++i)
        {
            sum.add_in_set(s1[i]);//добавляем в область определения элементы из множества s1
        }
        for (int i = 0; i < sum.size; ++i)
        {
            sum.add_in_set(s2[i]);//добавляем в область определения элементы из множества s2
        }
        return sum;
    }
    friend MySet operator-(MySet& s1, MySet& s2)//разность двух множеств
    {
        MySet<INF> d;
        for (int i = 0; i < s1.size; ++i)
        {
            if (s2.find(s1[i]) == -1)
                d.add_in_set(s1[i]);
        }
        return d;
    }
    friend MySet operator*(MySet& s1, MySet& s2)//пересечение двух множеств
    {

        MySet<INF> p;//создание третьего множества(область пересечения)
        for (int i = 0; i < s1.size; i++)
        {
            if (s2.find(s1[i]) != -1)
                p.add_in_set(s1[i]);
        }
        /*for (int i = 0; i < p.size; ++i)
        {
            for (int j = i + 1; j < p.size; ++j)
            {
                if (s1[i] == s2[j])
                    p.add_in_set(s1[i]);
            }
        }*/
        return p;
    }

    bool operator==(MySet& s)//сравнение двух множеств
    {
        if (s.size != this->size)
            return false;
        for (int i = 0; i < s.size; ++i)
        {
            if (s[i] != this->pdata[i])
                return 0;
        }
        return 1;
    }

    void add_in_set( INF el);
    void delete_out_of_set(int i);
    bool is_element( INF el);
};

#endif

Файл MySet.cpp

#include "MySet.h"
template<class INF>
void MySet<INF>::add_in_set(INF el)//добавление элемента в множество
{
    if (this->find(el) == -1)
        this->add_element(el);
}

template<class INF>
void MySet<INF>::delete_out_of_set(int i)//удаление элемента из множества
{
    this->delete_element(i);
}

template<class INF>
bool MySet<INF>::is_element( INF el)//поиск элемента в множестве(проверка на повторение элементов)повторение элемента в мн невозможно
{
    if (this->find(el) == -1)
        return false;//значит такого элемента нет в множестве
    else
        return true;//значит такой элемент есть в множестве
}

Файл с функцией main()

#pragma once
#include<string>
#include "MyVector.h"
#include "MySet.h"
//#include "MyVector.cpp"
//#include "MySet.cpp"
using namespace std;

int main()
{
    setlocale(0, "russian");

    MyVector<string> v ("Hello");
    cout << v;
    v.add_element("Привет!");
    v.add_element("Привет!");
    v.add_element("Привет!");
    v.add_element("Привет!");
    v.add_element("Привет!");
    cout << "Вектор v: " << v << endl;
    v.add_element("Привет!");
    v.add_element("Привет!");
    v.add_element("Привет!");
    cout << "Вектор v: " << v << endl;
    MyVector<string> v1 = v;
    cout << "Вектор v1: " << v1 << endl;
    for (int i = 0; i < MAX_SIZE; i++)
        v1.delete_element(0);
    cout << "Вектор v1: " << v1 << endl;

    MySet<string> s("Yes");
    MySet<string> s1;
    MySet<string> s2;
    s.add_in_set("Привет!");
    s.add_in_set("No");
    string str ="Hello!";
    s.add_in_set(str);
    cout << "Множество s: " << s << endl;
    s1.add_in_set("Cat");
    s1.add_in_set("No");
    s1.add_in_set("Привет!");
    cout << "Множество s1: " << s1 << endl;
    s2 = s1 - s;
    cout << "Множество s2=s1-s: " << s2 << endl;
    cout << "Множество s1: " << s1 << endl;
    cout << "Множество s: " << s << endl;
    s2 = s - s1;
    cout << "Множество s2=s-s1: " << s2 << endl;
    cout << "Множество s1: " << s1 << endl;
    cout << "Множество s: " << s << endl;
    s2 = s1 + s;
    cout << "Множество s2=s1+s: " << s2 << endl;
    cout << "Множество s1: " << s1 << endl;
    cout << "Множество s: " << s << endl;
    s2 = s1 * s;
    cout << "Множество s2=s1*s: " << s2 << endl;
    cout << "Множество s1: " << s1 << endl;
    cout << "Множество s: " << s << endl;
    MySet<string> s3;
    s3 = s2;
    cout << "Множество s3=s2: " << s3 << endl;
    if (s3 == s2)
        cout << "Множество s3=s2\n";
    else
        cout << "Множество s3!=s2\n";
    if (s3 == s1)
        cout << "Множество s3=s1\n";
    else
        cout << "Множество s3!=s1\n";
    if (s1 == s3)
        cout << "Множество s1=s3\n";
    else
        cout << "Множество s1!=s3\n";

    system("pause");
    return 0;
}

Ответы (0 шт):