3

您好,我是 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)"

我究竟做错了什么?

4

3 回答 3

5

您想说您想将 sum 打印到cout,但cout不知道如何处理 type 的值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;
}

更多信息

于 2012-11-02T12:39:17.423 回答
3

您认为存在过载的假设std::coutoperator<<(std::tuple)错误的。错误信息很清楚。

您需要单独打印元组的元素。

于 2012-11-02T12:36:46.417 回答
0

错误说operator<<。您发布的代码没有任何问题,只是您尚未编写此函数。

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

编写该函数,错误就会消失。

于 2012-11-02T12:36:55.073 回答