【发布时间】:2012-11-20 14:14:48
【问题描述】:
我对 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;
}
下面有第 1 个问题...
假设我可以让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;
};
应该注意的是,我对另一个类使用了几乎相同的语法,并且没有收到错误消息。
感谢您的快速回复。
【问题讨论】:
-
"感谢您的快速回复。"我喜欢它:)
-
book.title 是私有成员 - 您无法在图书类之外访问它
-
@StevieG:他已将
istream& operator>> (istream&, book&);声明为friend。 -
只是让运营商成为会员?您的第二个问题可能是第一个问题的原因..
-
在没有朋友说明的情况下给我一条错误消息。关于“参数过多”的问题