Как соглашаться на переменные класса используя дружелюбную функцию другого класса?

Я хочу, чтобы "высшая" функция класса B смогла соглашаться и изменять стоимость переменных "в, b" класса A, используя методы / функции подруги

#include <iostream>  
using namespace std;  

class A; // Declaración previa de la clase A  

class B {  
    private:  
        int c;  
   public:  
        void suma(A numero);  
};  

class A {  
   private:  
        friend void B::suma(A numero); // Hacer amigo al método/función "suma" de la clase B  
        int a, b;  
   public:  
        A();  
};  

void B::suma(A numero) {  
   numero.a = 1;        // <-- No puedo acceder a estas variables  
   numero.b = 4;        // <-- No puedo acceder a estas variables  

   c = numero.a + numero.b; // <-- Esto es lo que quiero hacer  

   cout << c << endl;  
}  

main() {  
    B objeto;  
    objeto.suma();  
}  
0
задан 29.03.2016, 05:31
1 ответ

Проблема, которая у тебя есть, - следующая:

class B {  
    private:  
        int c;  
   public:  
        void suma(A numero);  
};

main() {  
    B objeto;  
    objeto.suma(); // <<--- AQUI!!!
}

Сосредоточись на, что подпись функции ждет, что в suma перемести его объект типа A в то время как ты ничего не перемещаешь его.

Измени вызов в, например:

objeto.suma(A());

... или добавь стандартную настройку к подписи функции:

class B {  
    private:  
        int c;  
   public:  
        void suma(A numero = A());  
};

и ты увидишь, как ошибка исчезает. Программа останется так, что назначенный по умолчанию строитель не составляет, потому что тебе остается помогать, A (кроме того, что ты опустишь это осуществление в примере, который ты поместил в твой вопрос).

Приветствие

1
ответ дан 24.11.2019, 14:41