将重载的输入运算符与此指针一起使用

Using overloaded input operator with this pointer

我找不到问题的答案,所以就这样吧。我用重载的 >> 运算符创建了 class。在代码的后面,我有一个使用相同代码的方法,所以我想对这个指针使用重载运算符,但似乎并不那么容易。我想知道这里有什么问题以及如何以优雅的形式解决它。

代码:

class Zadanie
{
    int rozmiar;
    vector<int> dane;
public:

Zadanie(int _rozmiar = 0)
{
    rozmiar = _rozmiar;
    dane.reserve(rozmiar);
}

int getRozmiar()              { return rozmiar; }
void setRozmiar(int _rozmiar) { rozmiar = _rozmiar;}

friend istream & operator >> (istream & StrmWe, Zadanie & zadanie)
{
    StrmWe >> zadanie.rozmiar;
    for(int i = 0 ; i < zadanie.rozmiar; i++)
    {
        int tmp;
        StrmWe >> tmp;
        zadanie.dane.push_back(tmp);
    }

    return StrmWe;
}

void WczytajDaneZPliku()
{
    const char* filepath = "data0.txt";
    ifstream plik(filepath);
    //plik.open(filepath, ios::in);

    if(plik.good())
        plik >> this;

    plik.close();
}

};

错误:'operator>>' 不匹配(操作数类型为 'std::ifstream {aka std::basic_ifstream}' 和 'Zadanie* const')

期待有人为我揭开这个谜底

因为你 operator >>() 需要一个 Zadanie 你可以使用 plik >> *this;*this 取消引用指针并为您提供基础对象。

你必须参考*this:

    if(plik.good())
        plik >> *this;

或者,显式调用运算符:

    if(plik.good())
        operator>>(plik, *this);