ошибка: 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;
}