C ++ cout не печатает в нужном порядке - PullRequest
0 голосов
/ 10 января 2020

есть перегрузка оператора, которую я сделал для некоторого назначения, и он должен вывести, имеет ли два интервала что-либо общее. И вывод не распечатывается в правильном порядке, потому что, как я заметил, он печатает то, что я хочу, во время вызова функции перегрузки оператора и только затем фактический текст, а после этого он все еще возвращает и печатает 'Invalid Interval' даже хотя я даже не вернул. на главной:

    cout << "interval13 && interval24 = " << (interval13 && interval24) << endl;
    cout << "interval13 && interval45 = " << (interval13 && interval45) << endl;
    cout << "interval24 && interval45 = " << (interval24 && interval45) << endl;
    cout << "interval24 && interval13 = " << (interval24 && interval13) << endl;
    cout << "interval45 && interval13 = " << (interval45 && interval13) << endl;
    cout << "interval45 && interval24 = " << (interval45 && interval24) << endl;

Функция:

template <class T>
Interval<T> Interval<T>::operator&&(Interval<T> &i1) {
    if (b < i1.a) {
        cout<<"EMPTY";
        exit;
    }
    else if (b == i1.a) {
        cout << "EMPTY";
        exit;
    }
    else if (a > i1.b) {
        cout << "EMPTY";
        exit;   
    }
    else if (a == i1.b) {
        cout << "EMPTY";
        exit;
    }
    else {
        if (a<i1.a){
            if (b < i1.b)
                return Interval<T>(i1.a, b);
            else return Interval<T>(i1.a, i1.b);
        }
        if (i1.a < a) {
            if (i1.b < b)
                return Interval<T>(a, i1.b);
            else return Interval<T>(a, b);
        }
    }
}

Выход:

intervall3 && interval24 = (2,3)
EMPTYintervall3 && interval45 = Invalid Interval
EMPTYinterval24 && interval45 = Invalid Interval
interval24 && intervall3 (2,3)
EMPTYinterval45 && intervall3 = Invalid Interval
EMPTYinterval45 && interval24 = Invalid Interval 

Что я сделал не так? и как я могу это исправить? спасибо.

1 Ответ

0 голосов
/ 11 января 2020

В своем определении оператора && вы используете ресурс std::cout. Однако при вызове && вам нужна строка, чтобы перейти к высокоуровневому вызову std::cout. Вам нужно переписать вашу функцию, чтобы вернуть объект std::string. Попробуйте избавиться от вызовов std::cout в функции шаблона. Обычно, однако, оператор && является логическим логическим оператором, поэтому вам действительно следует исправить функцию, которая вместо этого возвращает логическое значение, учитывая 2 входа.

Примерно так:

std :: cout << cout << "interval13 && interval24 =" << (doCompare (interval13, interval24)? "EMPTY": "NONEMPTY") << endl; </p>

где doCompare() принимает аргументы функции возвращаются bool.

Я бы попытался дать вам рабочее решение, но в настоящее время ваш код не компилируется, и я не вижу ни вашей конечной цели, ни желаемой функциональности.

Дополнительные проблемы:

Вызов exit() должен вызываться только в main(), а не в вспомогательной функции, определенной вне main(). Вы должны вызвать return, а затем вернуть любой тип возвращаемого значения функции (я не знаю, что именно вы хотите вернуть).

<< - это оператор, используемый с потоками C ++, такими как ostream и istream. Объект std::cout является выходным потоком, который выводится на консоль.

Я не могу запустить ваш код в его текущем состоянии, но я предлагаю вам больше изучить вопрос о перегрузке оператора .

...