字符串类或重载中的cin.get()

时间:2016-03-01 16:34:32

标签: c++ c++11 operator-overloading overloading

我在下面有一个字符串类:

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()创建一个重载,但是如何?

2 个答案:

答案 0 :(得分:0)

cin.getcin的成员函数(因此.)。您不能超载它,因此您应该使用>>运算符。

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;

}