简体   繁体   English

如何使用好友功能?

[英]How I can use friend functions?

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. 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'"如果我把它放在它所属的第一个 class 中,我的编译器会显示错误 C2027:“错误 C2027 使用未定义类型‘计算器’”

#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();
}

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 .撇开代码的其他问题不谈,如果您希望PlacadeBaza能够访问Calculator的私有成员,您需要声明PlacadeBazaCalculator的朋友 class 。

#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();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM