使用带有此指针的重载输入操作符

时间:2015-04-08 19:19:36

标签: c++ this operator-keyword

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

代码:

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();
}

};

错误:'运营商&gt;&gt;'不匹配(操作数类型是'std :: ifstream {aka std :: basic_ifstream}'和'Zadanie * const')

我期待着能为我揭开这个谜团的人。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您必须参考*this

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

或者,明确地致电运营商:

    if(plik.good())
        operator>>(plik, *this);
相关问题