Несмотря на то что классы друзья, он не могут получить доступ к привату друг друга
если поменять struct на class у Banka то в Odpisok вылезет куча ошибок(), несмотря на то что Banka это друг Odpisok'а, если же сделать Odpisok классом а не структурой, при этом там написано паблик везде тоесть приватка только у поля, то move тоже вылезет ошибка что очень странно, не понимаю как это так происходит
#pragma once
#include <iostream>
using std::ostream;
template <typename I>
class Odpisok;
template <typename I>
struct Banka
{
I x;
Odpisok<I> next;
Banka()
{
x = 0;
next = 0;
}
Banka(I a,const Odpisok<I>& b)
{
x = a;
next = b;
}
~Banka()
{
}
public:
friend Odpisok<I>;
};
template <typename I>
struct Odpisok
{
Banka<I>* a = 0;
public:
friend Banka<I>;
Odpisok()
{}
Odpisok(I x)
{
Odpisok<I> b;
a = new Banka<I>(x, b);
}
Odpisok(const Odpisok& b)
{
a = b.a;
}
Odpisok& operator =(const Odpisok& b)
{
this->a = b.a;
return *this;
}
Odpisok& operator =(void* b)
{
try
{
if (b == 0)
this->a = 0;
else
throw "сюда это нельзя";
}
catch (const char* a)
{
std::cout << a;
}
return *this;
}
const bool operator ==(const Odpisok& b) const
{
return (a == b.a);
}
const bool operator !=(const Odpisok& b) const
{
return (a != b.a);
}
const bool operator ==(void* b) const
{
try
{
if (b == 0)
return (a == b);
else
throw "сюда это нельзя";
}
catch (const char* a)
{
std::cout << a;
}
return false;
}
const bool operator !=(void* b) const
{
try
{
if (b == 0)
return (a != b);
else
throw "сюда это нельзя";
}
catch (const char* a)
{
std::cout << a;
}
return false;
}
const bool plov() const
{
return (a == 0);
}
I inf() const
{
return a->x;
}
Odpisok& Next() const
{
return a->next;
}
void move()
{
a = (a->next).a;
}
const Odpisok& poiskel(const Odpisok& s=Odpisok()) const
{
if (a->next != s)
return (a->next).poiskel(s);
else
return *this;
}
void addk(I y)
{
if (a == 0)
{
Odpisok v(y);
*this = v;
}
else
{
Odpisok u (poiskel());
Odpisok c(y);
u.a->next = c;
}
}
void delk()
{
Odpisok u(poiskel());
if (u.a == a)
a = 0;
else
{
Odpisok e(poiskel(u));
e.a->next = 0;
}
delete u.a;
}
void deletelka()
{
if (a != 0)
{
delk();
deletelka();
}
}
~Odpisok()
{
}
friend ostream& operator << (ostream& w, const Odpisok& x);
};