重载 >> 运算符 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);