可能的循环引用

possible circular referencing?

本文关键字:引用 循环      更新时间:2023-10-16

也许是因为我已经连续盯着这个5个小时了,我只是在阅读明显的解决方案,但Xcode声明我的对象向量(在头文件中声明)在一个。cpp文件中未声明;然而,我的另一个。cpp文件可以访问向量,所以我不确定问题是什么。也许我的头文件不合适,或者我无意中"循环引用"??建议好吗?

publications.h

#ifndef PUBLICATIONS_H
#define PUBLICATIONS_H
#include "std_lib_facilities.h"
class Publication {
    private:
        string
            publication_title,
            publication_author,
            publication_year,
            publication_genre,
            publication_media,
            publication_target_age,
            publication_ISBN;
        bool currently_checked_out;
    public:
        Publication(string title, string author, string year, string genre, string media, string target_age, string ISBN, bool checked_out) {
            publication_title = title;
            publication_author = author;
            publication_year = year;
            publication_genre = genre;
            publication_media = media;
            publication_target_age = target_age;
            publication_ISBN = ISBN;
            currently_checked_out = checked_out;
        }
        Publication(){};
};
#endif /* PUBLICATIONS_H */

library.h

#ifndef LIBRARY_H
#define LIBRARY_H
#include "std_lib_facilities.h"
class Publication;
class Library {
    private:
        vector<Publication> lb;
    public:
        Library(){};
        void documentation();
        void list_all_publications();
        void new_publication(string title, string author, string year, string genre, string media, string target_age, string ISBN, bool currently_checked_out);
};
#endif /* LIBRARY_H */

patron.h

#ifndef PATRON_H
#define PATRON_H
#include "std_lib_facilities.h"
class Publication;
class Patron {
    private:
        string
            customer_name,
            customer_telephone;
    public:
        void check_out_publication(string publication_requested);
        void return_publication(string check_in_publication_name);
        void check_out();
        bool is_checked_out();
        Patron(){};

};
#endif /* PATRON_H */

library.cpp(工作完美,可以访问vector in library.h)

#include "library.h"
#include "patron.h"
#include "publications.h"
#include "std_lib_facilities.h"
Patron p;
void Library::documentation() {
    cout << "n-----Create a new publication----n";
    cout << "You will enter all the necessary info for a new publication (title, author, year, genre, media, target age, and ISBN).n";
    cout << "n----List all Publications-----n";
    cout << "List all publications that have been entered (in this current session).n";
    cout << "n---Check out Publication----n";
    cout << "You will enter your name and telephone number and the publication will be checked out.n";
    cout << "n-----Return Publication------n";
    cout << "A previously checked out publication will be marked as returned.n";
}
void Library::new_publication(string title, string author, string year, string genre, string media, string target_age, string ISBN, bool checked_out) {
    lb.push_back(Publication(title, author, year, genre, media, target_age, ISBN, checked_out));
}
void Library::list_all_publications() {
    for (int i = 0; i < lb.size(); i++) {
        cout << "Title: " << "tChecked Out: " << p.is_checked_out() << endl;
    }
}

patron.cpp(有问题的文件,不能访问library.h)

#include "publications.h"
#include "library.h"
#include "patron.h"
#include "std_lib_facilities.h"
void Patron::check_out_publication(string publication_requested) {
    // check to make sure publication isn't already checked out.
    for (int i = 0; i < lb.size(); i++) {
        if ((publication_requested == lb[i].publication_title) && lb[i].currently_checked_out) {
            cout << "Sorry, this publication is currently checked out." << endl;
        } else if ((publication_requested == lb[i].publication_title) && !(lb[i].currently_checked_out)) {
            cout << "Enter your name: ";
            getline(cin, customer_name);
            cout << "Enter your telephone number (no dashes/no spaces): ";
            cin >> customer_telephone;
        } else {
            continue;
        }
    }
}
void Patron::return_publication(string check_in) {
    for (int i = 0; i < lb.size(); i++) {
        if ((check_in == lb[i].publication_title) && lb[i].currently_checked_out) {
            // marked as no longer checked out.
            lb[i].currently_checked_out = false;
        }
    }
}
bool Patron::is_checked_out() {
     return currently_checked_out;
}
void Patron::check_out() {
   currently_checked_out = true;
}

patron.cpp错误

USE OF UNDECLARED IDENTIFIER "lb"

lbLibrary类的私有成员。您可以在library.cpp文件中访问它,因为您在Library成员函数中使用它。而在Patron类中,你直接访问它。但是编译器认为它只是另一个变量,您没有声明它。您可能需要为Library添加一个访问器。