麻烦超载<<操作员,麻烦打印对象的向量

时间:2017-12-02 06:48:29

标签: c++ vector overloading codeblocks

标题文件:

#ifndef CART_H
#define CART_H

#include "Tops.h"
#include <iostream>
#include <vector>
using namespace std;

class Cart
{
public:
    Cart();
    void addTop(Tops& top);
    friend ostream& operator<<(ostream& ostr, const Cart& c);


private:
    vector<Tops> tops;
};

#endif

实施档案:

#include "Cart.h"
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

Cart::Cart() { }

void Cart::addTop(Tops &top)
{
    tops.push_back(top);
}

ostream& operator<<(ostream &ostr, const Cart &c)
{
    ostr << "TOPS IN CART:\n-------------\n";
    for (auto const top : c.tops) {ostr << top << endl; } // no match for 'operator<<'

    return ostr;
}

问题:我不断为运营商&lt;&lt;&#34;错误,我不知道为什么,我也不知道它意味着什么。当我谷歌这个错误时,导致其他人代码错误的原因并不适用于我的。

1 个答案:

答案 0 :(得分:0)

在您的声明中,您已声明Cart参数将为const:

friend ostream& operator<<(ostream& ostr, const Cart& cart);

但你的定义不是:

ostream& operator<<(ostream &ostr, Cart &c)

他们需要匹配(两者都是const或者两者都不是 - 这两个const都在这里),因为朋友声明是有用的。