c++ - 我不能重载输入运算符来输入一个字符数组(C 风格字符串),这是我的类的一个成员变量吗?

标签 c++ c++11

举个例子:

#include <iostream>
using namespace std;

class Input
 {
    int m_int;
    double m_doub;
    char* m_char;

public:
    Input(int integer, double floating, char* character)
    {
        m_int = integer;
        m_doub = floating;
        m_char = character;
    }

    friend istream& operator >> (istream &ope, Input &obj);
    friend ostream& operator << (ostream &ope, Input &obj);

    int ret_int(){return m_int;}
    double ret_doub(){return m_doub;}
    char* ret_char(){return m_char;}
};

istream& operator >> (istream &ope, Input &obj)
{
    ope >> obj.m_int;
    ope >> obj.m_doub;
    ope >> obj.m_char;
}

ostream& operator << (ostream &ope, Input &obj)
{
    ope << obj.m_int;
    ope << obj.m_doub;
    ope << obj.m_char;
}

int main()
{
    Input var(51, 56.2, "Avneet");

    std::cin >> var;
    std::cout << var;
    return 0;
}

程序正常,直到我通过重载运算符输入字符串。 ope >> obj.m_int 已接受,ope >> obj.m_doub 已接受,ope >> obj.m_char 程序崩溃了???

提前致谢:-)

最佳答案

问题从这里开始

Input var(51, 56.2, "Avneet");

Input 中用字符串文字初始化 char* 指针。

输入操作 ope >> obj.m_char 然后将尝试将输入存储在文字中。崩溃!

使用 std::string 成员会更好。

关于c++ - 我不能重载输入运算符来输入一个字符数组(C 风格字符串),这是我的类的一个成员变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32432707/

相关文章:

c++ - std::list 的 const_iterator 与迭代器

c++ - 这段代码是否正确?

c++ - 读取缓冲区 C/C++

c++ - std::make_unique 和 std::unique_ptr 内部有 new 的区别

C++11 线程等待行为:std::this_thread::yield() 与 std::this_thread::sleep_for( std::chrono::milliseconds(1) )

c++ - std::sort 不适用于重载 < 运算符的用户定义对象

c++ - 组合两个不同大小的 vector 的值

c++ - 在Mac OS X 10.8上编译并使用boost 1.51.0

c++ - uniform_real_distribution() 的最小值

c++ - "Const"在 C++ 中还做了什么,然后告诉编译器特定的东西是只读的