编译器错误与`<<`

One*_*hot 0 c++ serialization struct compiler-errors

我一直在努力让这个程序完成,它将多个结构保存到文件中,可以将它们读回并编辑它们,然后将它们全部保存回文件.我一直在研究这个逻辑,更不用说其他人的大量帮助和大量的谷歌搜索时间......现在我收到编译错误.任何帮助将非常感激.

码:

template<typename T>
void writeVector(ofstream &out, const vector<T> &vec);

struct InventoryItem {
    string Item;
    string Description;
    int Quantity;
    int wholesaleCost;
    int retailCost;
    int dateAdded;
} ;


int main(void)
{
    vector<InventoryItem> structList;
    ofstream out("data.dat");
    writeVector( out, structList );
    return 0;
}

template<typename T>
void writeVector(ofstream &out, const vector<T> &vec)
{
    out << vec.size();

    for(vector<T>::const_iterator i = vec.begin(); i != vec.end(); i++)
    {
        out << *i; //  error C2679
    }
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

1>.\Project 5.cpp(128) : error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const InventoryItem' (or there is no acceptable conversion)
// listed overload variants skipped
1>        while trying to match the argument list '(std::ofstream, const InventoryItem)'
1>        .\Project 5.cpp(46) : see reference to function template instantiation 'void writeVector<InventoryItem>(std::ofstream &,const std::vector<_Ty> &)' being compiled
1>        with
1>        [
1>            _Ty=InventoryItem
1>        ]
Run Code Online (Sandbox Code Playgroud)

sth*_*sth 8

您没有operator<<定义指定InventoryItem应如何打印到输出流的定义.您尝试打印它,编译器不知道如何.你需要定义一个像这样的函数:

std::ostream& operator<<(std::ostream &strm, const InventoryItem &i) {
  return strm << i.Item << " (" << i.Description << ")";
}
Run Code Online (Sandbox Code Playgroud)