也許是因爲我一直盯着這個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 (工作完全正常,可以訪問向量在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"
'library.h'必須'#include「publications.h」'。就像你現在所做的那樣,它是未定義的行爲(庫聲明瞭一個不完整類型的向量) –
你的錯誤信息與包含無關;在'Patron :: check_out_publication'你寫'for(int i = 0; i