将重载的输入运算符与此指针一起使用
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);
我找不到问题的答案,所以就这样吧。我用重载的 >> 运算符创建了 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);