C++ 友元函数错误:使用未声明的标识符并访问私有成员

问题描述 投票:0回答:1

我目前正在开发一个 C++ 程序,该程序涉及两个类:Book 和 Library。 Book 类有几个私有成员变量,我试图从库类访问这些变量。为了实现这一目标,我尝试使用友元函数。这是我正在使用的代码:

class Book{
    string name;
    string author;
    string pages;
    string edition;
    string rating;
    string price;

public:
    void collection(void){
        // Code to collect book info...
    }

    friend void library::search(string search);
};

class library{
public:
    vector<Book> Books;

    void search(string search){
        for(int i=0;i<Books.size();i++){
            if(Books[i].name==search){
                cout<<"Book found"<<endl;
            }else{
                cout<<"Book not found"<<endl;
            }
        }
    }
};

int main(){
    library lab;
    lab.addbook();
    lab.addbook();
    lab.addbook();
    lab.info();
    lab.search("GTHs");
    return 0;
}

当我尝试编译此代码时,出现以下错误:

./main.cpp:137:17: error: use of undeclared identifier 'library'
    friend void library::search(string search);
                ^
./main.cpp:152:25: error: 'name' is a private member of 'Book'
            if(Books[i].name==search){
                        ^
./main.cpp:112:12: note: implicitly declared private here
    string name;

我知道

name
变量在
Book
类中是私有的,这就是为什么我尝试使用友元函数来访问它。但我不确定为什么会收到关于
library
未声明的错误,而且我不知道如何修复这些错误。

我的目标是让程序询问图书信息,然后给我所需的结果。谁能帮助我了解我做错了什么以及如何解决它?

所以请帮我解决这个错误。

c++ object oop private-members friend-function
1个回答
0
投票

不要添加 Friend 函数,而是将库添加为友元类。

class Book{
string name;
string author;
string pages;
string edition;
string rating;
string price;
public:
void collection(void){
    // Code to collect book info...
}

friend class library;
};
© www.soinside.com 2019 - 2024. All rights reserved.