我找不到我的问题的答案,所以就这样了。我创建了带有重载>>的类运营商。后来在代码中,我有一个使用相同代码的方法,所以我想使用这个指针重载运算符,但它似乎并不那么容易。我想知道这里有什么问题以及如何以优雅的形式解决它。
代码:
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')
我期待着能为我揭开这个谜团的人。
答案 0 :(得分:1)
由于operator >>()
需要Zadanie
,您可以使用plik >> *this;
。 *this
取消引用指针并为您提供基础对象。
答案 1 :(得分:0)
您必须参考*this
:
if(plik.good())
plik >> *this;
或者,明确地致电运营商:
if(plik.good())
operator>>(plik, *this);