2

我对 C++ 很陌生,如果我的问题不够具体,请见谅。开始。

我试图>>为一个我称之为“书”的类重载运算符。“Book”包含“title”、“author”和“publisher”字符串对象、“student count”int 和“price”双变量。我的部分任务是从提供的 .txt 文件中获取这些值,并将值加载到它们相应的变量/对象中。所有值都在 .txt 文件中各自的行中,并且它们都遵循以下格式:

//标题,作者,出版商,价格

从 Java 开始
加迪斯  
斯科特/琼斯
105.99

我尝试使用getline()获取字符串值(我在将价格翻倍后使用临时字符串),但是当我输入它时,Visual Studio 说:

错误:没有重载函数“getline”的实例与参数列表匹配。

我不明白这一点。我包括了<iostream><string>,我相信它们都是getline工作所必需的。在转到主代码之前,我正在努力获取类文件,所以对于没有要发布的主代码,我深表歉意。这是课本的 .cpp 文件:

#include <iostream>
#include <string>
#include "book.h"

using namespace std;

book::book()
{
}

book::~book()
{
}

istream& operator>> (istream &in, book &bookInfo) {
    string temp;
    getline(in, bookInfo.title);
    return in;
}

下面是第一个问题...

假设我可以getline上班,我还有另一个问题。Visual Studio 说这bookInfo.title是无法访问的,即使这是该类随附的 .cpp 文件。我什istream&至在类本身中将该函数列为友元函数:

#include <iostream>
#include <string>

class book {
    friend istream& operator>> (istream&, book&);

public:
    book();
    virtual ~book();

private:
    string title;
    string author;
    string publisher;
    double price;
};

应该注意的是,我对另一个类使用了几乎相同的语法,并且没有收到错误消息。

感谢您的快速回复。

4

2 回答 2

3

在您的标题中,您没有使用std::. 修复:

class book
{

    friend std::istream& operator>> (std::istream&, book&);

public:

    book();

    virtual ~book();

private:

    std::string title;
    std::string author;
    std::string publisher;
    double price;

};
于 2012-11-20T14:23:14.523 回答
-1

getline 是 std::istream 类的一种方法,请参见此处

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

你应该在类实例上调用它,例如

your_input_stream.getline( your_params ... )
于 2012-11-20T14:30:36.033 回答