【问题标题】:cin.get() in string class or overloading字符串类中的 cin.get() 或重载
【发布时间】:2016-03-01 16:34:31
【问题描述】:

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

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: 'std::basic_istream> &std::basic_istream>::get(std::basic_streambuf> &,_Elem)' : 无法将参数 1 从 'Mystring' 转换为 'char *' c:\users\thai\documents\visual studio 2013\projects\overloading\overloading\main.cpp 11 1 重载

我想我应该为 cin.get() 创建一个重载,但是如何??

【问题讨论】:

  • 为什么不使用&gt;&gt; 运算符?

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


【解决方案1】:

您将其分配给 MyString 数组,您应该将其分配给 MyString 对象。

如果您正确地实现了“>>”和“

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;

}

【讨论】:

    【解决方案2】:

    cin.getcin 的成员函数(因此是.)。你不能重载它,所以你应该使用你的&gt;&gt; 操作符。

    for (auto& i : s)
        cin >> s;
    

    如果您不想这样,只需在您的 MyString 中编写一个 get 方法,该方法采用 istream

    Mystring& Mystring::get(std::istream& in) { ... }
    
    Mystring ms;
    ms.get(std::cin);
    

    您不能重载该类之外的另一个类的成员函数。由于它们的语法,您可以对运算符执行此操作,但仅此而已。你必须改变你自己的类来处理它。

    【讨论】:

    • 天啊!!!如果我使用我的 >> 运算符,它将被删除所有在空格之后的字符:(
    • @BunThaiDeng 这就是get 要做的事情?
    • 当我输入一个像 "Hello" 这样的字符串时,我输出它会是 "Hello" 但是当我输入 "Hello World" 它输出 "Hello" ,所以我需要使用 cin.get( );
    • @BunThaiDeng 问题是如何超载cin.get,答案是不可能。我不知道您要做什么,但如果您在实施某事时遇到问题,您可以提出一个包含所有相关信息的问题。
    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2015-10-22
    相关资源
    最近更新 更多