C++ 2过载操作员>&燃气轮机;方法被调用

C++ 2过载操作员>&燃气轮机;方法被调用,c++,C++,我有一个复杂的类,有两个重载的操作符>方法,一个用于控制台中的std::istream,第二个用于std::ifstream std::istream& operator>>(std::istream& is, Complex& c) { int re, im; std::cout << "input the real-part of the complex" << std::endl;

我有一个复杂的类,有两个重载的
操作符>
方法,一个用于控制台中的
std::istream
,第二个用于
std::ifstream

std::istream& operator>>(std::istream& is, Complex& c) 
{

    int re, im;
    std::cout << "input the real-part of the complex" << std::endl;
    while ( ! (is >> re))
    {
        std::cout << "Please give me a double!  Try again: \n";
        is.clear();
        is.ignore(1000, '\n');
    }
    std::cout << "input the imaginary-part of the complex" << std::endl;
    while ( ! (is >> im))
    {
        std::cout << "Please give me a double!  Try again: \n";
        is.clear();
        is.ignore(1000, '\n');
    }
    c = Complex(re, im);
    return is;
}

std::ifstream& operator>>(std::ifstream& ifs, Complex& c) 
{
    int re, im;
    ifs >> re; ifs>> im;
    c = Complex(re,im);
    return ifs;
}
这两个操作符>>方法都被调用,因此控制台包含额外的输出,但是数据是从文件中正确加载的。结果显示在图像中

很容易注意到,程序要求给定的值,就像控制台缓冲区要求从文件缓冲区加载数据一样


有没有其他方法来处理它,除了CRATE单独的方法<代码>插入式Ray2 < /C> > <代码> STD::IfStase而不是<代码> STD::ISTRAMA

< P>可以考虑模板<代码>插件> <代码>:

template<class T>
void insertArray(T& is, Complex* arr, int size)
模板
无效插入阵列(T&is,复杂*arr,整数大小)

<代码> > p>可以考虑模板<代码>插件> <代码>:

template<class T>
void insertArray(T& is, Complex* arr, int size)
模板
无效插入阵列(T&is,复杂*arr,整数大小)

如果我正确理解你的问题,你可以写:

if ( &is == &std::cin )
    std::cout << "Please give me a double!  Try again: \n";
if(&is==&std::cin)

如果我正确理解你的问题,你可以写:

if ( &is == &std::cin )
    std::cout << "Please give me a double!  Try again: \n";
if(&is==&std::cin)

std::难道没有什么特别的原因让你一开始就有两个重载吗?看起来并不是两个重载都被调用,只有一个重载用于
std::istream
,这是有意义的,因为在
insertArray
中,
is
is
std::istream&
。我不建议实现这个操作符两次。如果我使用您的类并希望从控制台读取它,但提供自己的消息,该怎么办?我不能,它总是用你的。老实说:不。。。这个复杂的课程是由主管提供的,我应该在做作业时使用它。可能他想在控制台输入时提供“用户友好”的数据请求,这在使用
std::ifstream
时是不必要的,为什么忽略1000个字符而不是所有字符?有一个特殊的常数,你可以用它,我记不清了。有什么特别的原因你一开始就有两个重载吗?看起来并不是两个重载都被调用,只有一个用于
std::istream
,这很有意义,因为在
insertArray
中,
is
is
std::istream&
。我不建议两次实现这个操作符。如果我使用您的类并希望从控制台读取它,但提供自己的消息,该怎么办?我不能,它总是用你的。老实说:不。。。这个复杂的课程是由主管提供的,我应该在做作业时使用它。可能他想在控制台输入时提供“用户友好”的数据请求,这在使用
std::ifstream
时是不必要的,为什么忽略1000个字符而不是所有字符?有一个特殊的常数,你可以用它,我记不得了。