Я довольно новичок в C ++, извините, если мои вопросы не достаточно конкретны. Вот оно.
Я пытаюсь перегрузить >>
Оператор для класса, который я назвал «book». «Book» содержит строковые объекты title, author и publisher, int для count студента и двойную переменную price. Часть моего задания — взять эти значения из предоставленного файла .txt и загрузить значения в соответствующие им переменные / объекты. Все значения находятся в своих собственных строках в файле .txt, и каждый из них имеет следующий формат:
// Название, Автор, Издатель, Цена Начиная с Java Gaddis Скотт / Джонс 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;
};
Следует отметить, что я использовал почти такой же синтаксис для другого класса, и мне не было выдано никаких сообщений об ошибках.
Спасибо за очень быстрый ответ.
В вашем заголовке вы не используете 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;
};
getline — это метод класса std :: istream, см. Вот:
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
Вы должны вызывать его в экземпляре класса, например
your_input_stream.getline( your_params ... )