c++ friend методы

176
05 марта 2019, 16:20

Я хочу открыть методу класса B полный доступ к приватным членам класса A, но получаю от компилятора непонятное сообщение об ошибке.

Вот упрощенный пример кода:

class A;
class B;
class A
{
    friend void B::execute(A &_a);
    public:
    // ...
    private:
    // ...
};
class B
{
    void execute(A &_a);
};

Сообщение компилятора:

error: invalid use of incomplete type 'class A::B'|

Как я понял, компилятор принимает B::execute() за A::B::execute()? Как ему объяснить, что я от него хочу?

Answer 1

Нет, компилятор просто не понимает, о каком таком

void B::execute(A &_a);

вы ему рассказываете - в этот момент он понятия не имеет, что именно есть в B, в частности, метод execute()....

Вот так вполне работает:

class A;
class B
{
public:
    void execute(A &_a);
};

class A
{
    friend void B::execute(A &_a);
    public:
    // ...
    private:
    // ...
};
READ ALSO
Получения IP адреса и порта по имени хоста

Получения IP адреса и порта по имени хоста

Как узнать IP адрес и порт, имея хост?

192
Живой элемент на layout

Живой элемент на layout

Реализовать примерно следующее: 1На layout добавить графический элемент (дым) 2

198
Подкиньте парсер 3d-моделей из blender в LWJGL 3

Подкиньте парсер 3d-моделей из blender в LWJGL 3

Собственно, вопрос в заголовкеДля написания собственного парсера моих знаний пока не хватает (В Java, как и в самой среде LWJGL я довольно недавно)

243
Не запускается Spring boot

Не запускается Spring boot

Есть большая проблема

249