超载>>操作员C++

Overloading >> operator C++

本文关键字:gt C++ 操作员 超载      更新时间:2023-10-16

我已经发布了一个关于这个问题的问题,但没有得到有用的答案,我对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的类中,该类包含ID号、名称和地址的字段,因此我重载了>>运算符,如下所示:(借款人.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;
    }

我犯了各种各样的错误,我看不出自己做错了什么:请帮助:(

https://i.stack.imgur.com/6kJoK.png

编辑:类别定义:

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);   
};

如果此运算符重载仅存在于Borrower.cpp中,则main将无法找到它。

将该功能的原型添加到借款人.h

因此,在Borrower.h中,在类别定义之后,添加以下行:

istream& operator>>(istream& in, Borrower& b);

我确信您必须friend运算符,这样ifstream才能访问您的对象。虽然已经有一段时间没有这样做了,但这里有一个教程链接:http://www.tutorialspoint.com/cplusplus/input_output_operators_overloading.htm

编辑:对不起。此外,我对您在输入重载过程中使用std::getline()有点困惑。