How I can use friend functions?

Viewed 77

I started to learn some oop and I have a question, why I can't put the function in first class, I know there is a way to write the friend method down under second class. If I put it in the first class where it belongs my compiler shows the error C2027: "Error C2027 use of undefined type 'Calculator'"

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <ctime>

using namespace std;   

class Calculator;

class PlacadeBaza {
    char denumire_procesor[100];

public:    
    char* getDenumire() {
        return denumire_procesor;
    }

    void set(Calculator a, PlacadeBaza b, int memorie, char denumire[100]) { //C2027
        a.memorie_RAM = memorie; 
        strcpy(b.denumire_procesor, denumire); //C2027
    }
};

class Calculator {
    int memorie_RAM;

public:     
    int getMemorie_RAM() {
        return memorie_RAM;
    }
    
    friend void PlacadeBaza::set(Calculator a, PlacadeBaza b, int memorie, char denumire[100]);
};

int main() {
    Calculator a;
    PlacadeBaza b;
    int memorie;
    char denumire[100];
    
    cin >> memorie >> denumire;

    b.set(a, b, memorie, denumire);

    cout << a.getMemorie_RAM();
    cout << b.getDenumire();
}
1 Answers

Setting aside other issues with the code, if you wish PlacadeBaza to be able to access private members of Calculator you need to declare that PlacadeBaza is a friend class of Calculator.

#include <iostream>
#include <ctime>

using namespace std;
   
class PlacadeBaza;

class Calculator {
    int memorie_RAM;

public:     
    int getMemorie_RAM() {
        return memorie_RAM;
    }

    friend class PlacadeBaza;
};

class PlacadeBaza {
    char denumire_procesor[100];

public:    
    char* getDenumire() {
        return denumire_procesor;
    }

    void set(Calculator a, PlacadeBaza b, int memorie, char denumire[100]) { //C2027
        a.memorie_RAM = memorie; 
        strcpy(b.denumire_procesor, denumire); //C2027
    }
};

int main() {
    Calculator a;
    PlacadeBaza b;
    int memorie;
    char denumire[100];
    
    cin >> memorie >> denumire;

    b.set(a, b, memorie, denumire);

    cout << a.getMemorie_RAM();
    cout << b.getDenumire();
}
Related