我在下面有一个字符串类:
class Mystring
{
private:
char *letter;
public:
friend ostream & operator <<(ostream &out, const Mystring& s);
friend istream & operator >>(istream &in,Mystring& s);
};
这是主要功能:
int main()
{
Mystring s[10];
cin.get(s,10);
cout << s;
_getch();
return 0;
}
当我使用cin.get时,我得到这样的错误
错误1错误C2664:&#39; std :: basic_istream&gt; &放大器;的std :: basic_istream&GT; ::得到(STD :: basic_streambuf&GT; &安培;,_ ELEM)&#39; :无法从&#39; Mystring&#39;转换参数1到了#char; *&#39; c:\ users \ thai \ documents \ visual studio 2013 \ projects \ overloading \ overloading \ main.cpp 11 1重载
我想我应该为cin.get()
创建一个重载,但是如何?
答案 0 :(得分:0)
cin.get
是cin
的成员函数(因此.
)。您不能超载它,因此您应该使用>>
运算符。
for (auto& i : s)
cin >> s;
如果您不想这样做,只需在get
中写一个MyString
方法,即istream
。
Mystring& Mystring::get(std::istream& in) { ... }
Mystring ms;
ms.get(std::cin);
您不能重载该类之外的另一个类的成员函数。你可以为运营商做这些,因为它们的语法,但就是这样。你必须改变你自己的班级来处理它。
答案 1 :(得分:0)
您将其分配给MyString数组,您应该将其分配给MyString对象。
如果您已实施&#34;&gt;&gt;&#34;和&#34;&lt;&lt;&#;正确实现,这应该工作
int main()
{
Mystring s;
// Mystring should construct memory for *letter and put the string in it
// Quite confusing why you want to have only one letter inside MyString,
// Probably you need to change to a better name *letters.
cin >> s; // will stop reading till white space
cout << s;
//Incase you want to read a char array and construct a MyString
char a[10];
cin.get(a,10);
MyString(a); // You need to define a constructor in MyString for this to work.
_getch();
return 0;
}