如何重载结构向量的<<

How to overload << for a vector of structures

本文关键字:lt 向量 结构 何重载 重载      更新时间:2023-10-16

我在家庭作业程序的语法上遇到了问题。提示是重载机械臂,使其可以正确执行程序片段:

for (int i = 0; i < v.size(); ++i) cout << v[i] << endl; cout << endl;

所以,这就是我到目前为止所拥有的,但我仍然在 cout <<v[i] 语句(二进制表达式的操作数无效(中收到错误:

    unsigned int seed;
    struct node
    {
         int integer;
         double value;
    };
    double random(unsigned int &seed);
    void initialize_vector(vector<node> &v);
    template<typename T>
    void print_vector(const vector<T> &v);
    template<typename T>
    ostream &operator <<(ostream &out, const vector<T> &v);
    template<typename T>
    void output(ostream &out, const vector<T> &v);
    int main()
    {
        vector<node> v(10);
        initialize_vector(v);
        print_vector(v);
        return 0;
    }
    double random(unsigned int &seed)
    {
        const int MODULUS = 15749;
        const int MULTIPLIER = 69069;
        const int INCREMENT = 1;
        seed = ((MULTIPLIER * seed) + INCREMENT) % MODULUS;
        return double(seed) / double(MODULUS);
    }
    void initialize_vector(vector<node> &v)
    {
        for (int i = 0; i < v.size(); ++i)
        {
            v[i].integer = int (11 * random(seed));
            v[i].value = double (11 * random(seed));
        }
    }
    template<typename T>
    void print_vector(const vector<T> &v)
    {
        for (int i = 0; i < v.size(); ++i)
            cout << v[i] << endl;
        cout << endl;
    }
    template<typename T>
    ostream &operator <<(ostream &out, const vector<T> &v)
    {
        output(out, v);
        return (out);
    }
    template<typename T>
    void output(ostream &out, const vector<T> &v)
    {
        cout << v.integer;
        cout << setprecision(2) << fixed << setw(6) << v.value;
    }

我已经尝试传递节点而不是 T,以及传递最后 3 个函数的带有和不带有 const 引用的传递,所以我再次假设我在 void 输出函数中的语法以某种方式是错误的。任何帮助或指向正确方向的点将不胜感激。

*注意:我无法更改流和运算符功能。

  cout << v[i] << endl;

如果 v 是节点的向量,那么您还需要一个函数来重载节点的运算符<<

ostream &operator <<(ostream &out, const node &n)
{
    out << n.interger << " " << n.value;
    return out;
}