"运算符>>"不是"实例"的成员

`operator>>' is not a member of `Instance'

本文关键字:gt 成员 不是 运算符 实例      更新时间:2023-10-16

我有包含Instance.h头的InstancePool类(下面是它的一部分),但我在InstancePooloperator>>函数中的标题中得到了错误。

#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操作符>>函数是一个"朋友"函数BTW,实例中的函数也是如此。可能我试图以错误的方式访问实例"operator>>",但如果我知道正确的方法,我会被诅咒的。。。有什么帮助吗?

Friend函数不是成员函数,您不能像这样明确限定函数的名称,因为它不在名为Instance的命名空间中。

好消息是:你不需要。只需正常呼叫:

in >> inst;

不过,您的代码中还有更多的错误。首先,当读取时出现错误时,while (in.eof())将导致无限循环——永远不要这样做

其次,您正在使用getline读取和丢弃行。这可能不是你想做的,对吧?您想从行中读取每个实例,还是直接从输入流中读取?