2

私は C++ にかなり慣れていないので、質問が十分に具体的でない場合は申し訳ありません。ここに行きます。

>>「本」と呼んだクラスの演算子をオーバーロードしようとしています。"Book" には、"title"、"author"、"publisher" の文字列オブジェクト、"student count" int、"price" double 変数が含まれています。私の課題の一部は、提供された .txt ファイルからこれらの値を取得し、対応する変数/オブジェクトに値をロードすることです。すべての値は .txt ファイル内のそれぞれの行にあり、それぞれ次の形式に従います。

//タイトル、著者、出版社、価格

Java から始める
ガディス  
スコット/ジョーンズ
105.99

getline()文字列値を取得するために使用しようとしましたが (価格を 2 倍にした後に一時文字列を使用します)、入力すると、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、別の問題があります。bookInfo.titleこれはクラスに付随する.cppファイルですが、Visual Studioはアクセスできないと言います。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 に答える