функция — Как отправить два кортежа в качестве аргументов в переполнение стека

Здравствуйте, я новичок в C ++, и я пытаюсь создать программу, которая принимает два комплексных числа, суммирует их и возвращает сумму.

То, что я планирую сделать, это отправить два кортежа в функцию и вернуть один кортеж.

typedef tuple<float, float> complex_tuple;
complex_tuple a_tuple(a, b);
complex_tuple b_tuple(c, d);cout << sum(a_tuple, b_tuple);

и это моя функция:

tuple<float,float> sum(tuple<float, float>a, tuple<float, float>b){
float a_real= get<0>(a);
float a_imag= get<1>(a);
float b_real= get<0>(b);
float b_imag= get<1>(b);
return tuple<float, float>(a_real+b_real, a_imag+b_imag);
}

ошибка, которую я получаю:

0.cc:28:31: Error: no match for "operator<<" in "std::cout << sum(std::tuple<float, float>, std::tuple<float, float>)(b_tuple)"

Что я делаю неправильно?

3

Решение

Вы пытаетесь сказать, что хотите напечатать сумму cout, но cout не знает, как обрабатывать значения типа complex_tuple,

Обеспечить перегрузку operator<<(ostream&, const complex_tuple&) чтобы разрешить компиляцию кода:

ostream& operator<<(ostream& os, const complex_tuple& tuple) {
os << get<0>(tuple) << "+" << get<1>(tuple) << "i";
return os;
}

Дальнейшая информация.

5

Другие решения

Ваше предположение, что перегрузка для std::cout а также operator<<(std::tuple) существует неправильно. Сообщение об ошибке довольно ясно об этом.

Вам нужно будет распечатать элементы кортежа отдельно.

3

Ошибка говорит operator<<, В написанном вами коде нет ничего плохого, кроме того, что вы еще не написали эту функцию.

ostream& operator<<(ostream& out, const complex_tuple& x);

Напишите эту функцию, и ошибка исчезнет.

0
По вопросам рекламы [email protected]