ошибка: LNK2019: ссылка на неразрешенный внешний символ

Помогите плиз

ошибка: LNK2019: ссылка на неразрешенный внешний символ

Вот сам код

#include <iostream>
#include <string>
#include <fstream>
#define MAX_STR_LEN 65535
using namespace std;
template <class T>
class MyString
{
private:
    T* str;

public:
    MyString();


    MyString<T>& operator = (MyString<T>& obj);


    friend ostream& operator << (ostream& out, MyString<T> obj);
    friend istream& operator >> (istream& in, MyString<T> obj);

    friend ofstream& operator << (ofstream& out, MyString<T> obj);
    friend ifstream& operator >> (ifstream& in, MyString<T> obj);
    friend ofstream& operator >> (MyString<T> obj, ofstream& out);
    friend ifstream& operator << (MyString<T> obj, ifstream& in);

};

template <class T>
MyString<T>::MyString()
{
    // Последовательность символов
    str = new T[MAX_STR_LEN];
    str[0] = '\0';
}
template <class T>
// Присвоение
MyString<T>& MyString<T>::operator = (MyString<T>& obj)
{
    for (int i = 0; i < MAX_STR_LEN; i++) {
        // Присвоение символа в последовательности
        str[i] = obj.str[i];
        // Окончание последовательности
        if (str[i] == '\0') {
            break;
        }
    }
    return *this;
}

template <class T>
// Вывод на консоль
ostream& operator << (ostream& out, MyString<T> obj)
{
    for (int i = 0; i < MAX_STR_LEN; i++) {
        if (obj.str[i] == '\0') {
            break;
        }
        out << obj.str[i];
    }
    return out;
}
template <class T>
// Ввод с консоли
istream& operator >> (istream& in, MyString<T> obj)
{
    for (int i = 0; i < MAX_STR_LEN; i++) {
        // Присвоение символа
        obj.str[i] = in.get();
        // Окончание ввода последовательности
        if (obj.str[i] == '\n') {
            if (!i) i--;
            else {
                obj.str[i] = '\0';
                break;
            }
        }
    }
    return in;
}

template <class T>
// Вывод в файл
ofstream& operator << (ofstream& out, MyString<T> obj)
{
    for (int i = 0; i < MAX_STR_LEN; i++) {
        out.put(obj.str[i]);
        if (obj.str[i] == '\0') {
            break;
        }
    }
    return out;
}
template <class T>
ofstream& operator >> (MyString<T> obj, ofstream& out)
{
    for (int i = 0; i < MAX_STR_LEN; i++) {
        out.put(obj.str[i]);
        if (obj.str[i] == '\0') {
            break;
        }
    }

    return out;
}

template <class T>
// Ввод из файла
ifstream& operator >> (ifstream& in, MyString<T> obj)
{
    for (int i = 0; i < MAX_STR_LEN; i++) {
        // Присвоение символа
        obj.str[i] = in.get();
        // Окончание ввода
        if (obj.str[i] == '\0') {
            break;
        }
    }
    return in;
}
template <class T>
ifstream& operator << (MyString<T> obj, ifstream& in)
{
    for (int i = 0; i < MAX_STR_LEN; i++) {
        // Присвоение символа
        obj.str[i] = in.get();
        // Окончание ввода
        if (obj.str[i] == '\0') {
            break;
        }
    }
    return in;
}


int main()
{
    int deistv, exit = 0;
    ifstream fin;
    ofstream fout;
    setlocale(LC_ALL, "Russian");

    MyString<char> strA, strB;

    while (!exit) {
        cout << endl;
        cout << "1. Демонстрация присвоения A=B" << endl;
        cout << "2. Консольный ввод/вывод (cin>>A) (cout<<A)" << endl;
        cout << "3. Файловый вывод (f<<A) (B>>f)" << endl;
        cout << "4. Файловый вввод (A<<f) (f>>B)" << endl;
        cout << "5. Выход из программы" << endl << endl;
        cout << "Выберите действие (перегрузка операций): ";
        cin >> deistv;
        switch (deistv) {
        case 1:
            cout << "Строка А: ";
            cin >> strA;
            strB = strA; // наш оператор присвоения
            cout << "Cтрока B: " << strB << endl;
            break;
        case 2:
            cout << "Введите строку А: ";
            cin >> strA;
            cout << "Вы ввели строку A: " << strA << endl;
            break;
        case 3:
            fout.open("operator.txt", std::ofstream::out);
            cout << "Введите строку А: ";
            cin >> strA;
            fout << strA;
            cout << "Введите строку B: ";
            cin >> strB;
            strB >> fout;
            fout.close();
            break;
        case 4:
            fin.open("operator.txt", std::ifstream::in);
            strA << fin;
            cout << "Получена строка A из файла: " << strA << endl;
            fin >> strB;
            cout << "Получена строка B из файла: " << strB << endl;
            fin.close();
            break;
        case 5:
            exit++;
            break;
        }
    }
    return 0;
}

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