0

InstancePoolInstance.h ヘッダーが含まれているクラス (以下の一部) がありますが、 のoperator>>関数のタイトルにエラーが表示されInstancePoolます。

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <sstream>
#include <stdlib.h>

using namespace std;

#include "Instance.h"
#include "InstancePool.h"

istream &operator >> (istream &in , InstancePool &ip) {

    ip.Instances->clear();

    string input;
    getline(in , input);

    while (!in.eof()) {

        Instance inst;

        Instance::operator >>(in , inst); // <- line giving me the error

        ip.Instances->push_back(inst);

        getline(in , input);

    }
}

InstancePool operator>> 関数はところで「フレンド」関数であり、インスタンスでも同じ関数です。おそらく私はインスタンス 'operator>>' に間違った方法でアクセスしようとしていますが、正しい方法を知っていれば気が滅入るでしょう...助けはありますか?

4

1 に答える 1

3

フレンド関数はメンバー関数ではありません。関数の名前を明示的に修飾することはできません。これは、単に という名前空間内にないためですInstance

良いニュースは、その必要がないことです。普通に呼び出すだけです:

in >> inst;

ただし、コードにはさらにバグがあります。まず、while (in.eof())読み取り中にエラーが発生すると、無限ループが発生します。<strong>これは絶対に行わないでください。

第二に、 で行を読んで破棄していgetlineます。これはおそらくあなたがやりたいことではありませんよね?各インスタンスを行から読み取るか、入力ストリームから直接読み取りますか?

于 2013-02-08T21:26:20.693 に答える