重载 >> 运算符 C++
Overloading >> operator C++
我已经发布了一个关于这个的问题,但没有得到有用的答案,我是 C++ 的新手,我已经在这个问题上停留了 3 个多小时,如果它是一个愚蠢的问题,我很抱歉小东西,但我无法解决。
我正在尝试从格式为以下的文本文件中读取信息:
1 David Davidson: 64 Zoo Lane
2 Homer Simpson: 123 Fake Street, Springfield
3 Craig Boone: Presidential Suite, Lucky 38, New Vegas
...etc
我想将信息存储在一个名为 Borrower 的 class 中,其中包含他们的 ID 号、姓名和地址字段,因此我重载了 >> 运算符,如下所示:
(Borrower.cpp)
istream& operator>>(istream& in, Borrower& b) {
in >> b.idNumber;
std::getline(in, b.name, ':');
in.ignore(1);
in >> b.address;
return in;
}
我在 main.cpp 中实现它是这样的:
ifstream fileUsers;
fileUsers.open("users.txt");
Borrower b;
while (fileUsers.good()){
fileUsers >> b;
cout << b;
}
我遇到了各种各样的错误,但我看不出我做错了什么:
请帮助:(
http://i.stack.imgur.com/6kJoK.png
编辑:Class 定义:
class Borrower {
public:
int idNumber;
string name;
string address;
vector<LibraryBook> booksOnLoan;
vector<LibraryBook> previousLoans;
Borrower();
Borrower(int theIdNumber, string theName, string theAddress);
int getIdNumber();
string getName();
string getAddress();
istream& operator >>(istream& in, Borrower& b);
ostream& operator <<(ostream& out, Borrower& b);
};
我很确定您必须 friend
运算符以便 ifstream 可以访问您的对象。虽然已经有一段时间没有这样做了,但是这里有一个 link 关于它的教程:http://www.tutorialspoint.com/cplusplus/input_output_operators_overloading.htm
编辑:抱歉。另外,我对您在输入过载过程中使用 std::getline() 感到有点困惑。
如果此运算符重载仅存在于 Borrower.cpp 中,则 main 将无法找到它。
将函数的原型添加到Borrower.h
所以在Borrower.h中,在class定义之后,添加如下一行:
istream& operator>>(istream& in, Borrower& b);
我已经发布了一个关于这个的问题,但没有得到有用的答案,我是 C++ 的新手,我已经在这个问题上停留了 3 个多小时,如果它是一个愚蠢的问题,我很抱歉小东西,但我无法解决。
我正在尝试从格式为以下的文本文件中读取信息:
1 David Davidson: 64 Zoo Lane
2 Homer Simpson: 123 Fake Street, Springfield
3 Craig Boone: Presidential Suite, Lucky 38, New Vegas
...etc
我想将信息存储在一个名为 Borrower 的 class 中,其中包含他们的 ID 号、姓名和地址字段,因此我重载了 >> 运算符,如下所示: (Borrower.cpp)
istream& operator>>(istream& in, Borrower& b) {
in >> b.idNumber;
std::getline(in, b.name, ':');
in.ignore(1);
in >> b.address;
return in;
}
我在 main.cpp 中实现它是这样的:
ifstream fileUsers;
fileUsers.open("users.txt");
Borrower b;
while (fileUsers.good()){
fileUsers >> b;
cout << b;
}
我遇到了各种各样的错误,但我看不出我做错了什么: 请帮助:(
http://i.stack.imgur.com/6kJoK.png
编辑:Class 定义:
class Borrower {
public:
int idNumber;
string name;
string address;
vector<LibraryBook> booksOnLoan;
vector<LibraryBook> previousLoans;
Borrower();
Borrower(int theIdNumber, string theName, string theAddress);
int getIdNumber();
string getName();
string getAddress();
istream& operator >>(istream& in, Borrower& b);
ostream& operator <<(ostream& out, Borrower& b);
};
我很确定您必须 friend
运算符以便 ifstream 可以访问您的对象。虽然已经有一段时间没有这样做了,但是这里有一个 link 关于它的教程:http://www.tutorialspoint.com/cplusplus/input_output_operators_overloading.htm
编辑:抱歉。另外,我对您在输入过载过程中使用 std::getline() 感到有点困惑。
如果此运算符重载仅存在于 Borrower.cpp 中,则 main 将无法找到它。
将函数的原型添加到Borrower.h
所以在Borrower.h中,在class定义之后,添加如下一行:
istream& operator>>(istream& in, Borrower& b);