如何将类的向量写入文件

时间:2013-10-03 06:02:10

标签: c++ class file-io constructor struct

我不确定我该怎么说,所以我会尝试把它放在代码中。 (这有很多错误,我知道它不会编译它只是为了表明我想要做什么,因为我不能用文字说出来)

    using namespace std; //for correctness sake
    class foo {
    public:
        foo(int a=0, int n=0);
        void stuff(int a);
        void function(int n);
        const int get_function() {return n;}
        const int get_stuff(){return a;}
    private: 
       int n, a;
    };
    struct Store{
        public: get_foo(){return vector<f.foo>;} //I'm not too sure of the syntax here but you get the idea
    private: 
        foo f;

    }

基本上我想获取类foo中返回的所有信息,并将其格式化输出到文件中。事实是,我需要在文件中制作其中许多内容,并且必须能够将其读回来才能获得任何价值。 所以只是将每个连续的foo类附加到文件中都不起作用(至少我看不出如何)。

我尝试使用ostream重载<<运算符,但我不知道如何调用它来将其写入文件。欢迎任何建议!感谢。

3 个答案:

答案 0 :(得分:2)

我认为你的Store应该是这样的:

struct Store
{
public:
    std::vector<foo> get_foo()
    {
       return f;
    }

private: 
    std::vector<foo> f;
};

重载<<的{​​{1}}:

std::ostream

答案 1 :(得分:1)

您的代码存在许多错误。

很多很明显,你从来没有读过任何C ++书籍,而只是试验编译器。

不要那样做。由于许多独立的原因,C ++实际上是世界上最糟糕的语言。

无论你有多聪明。

在某些领域,实际上聪明的是一个问题,因为许多C ++规则不是连贯逻辑设计的结果,而是历史演变和委员会决策的结果。即使Hari Seldon也无法正确预见委员会的决定,也无法推断出历史。

只需选择good book并阅读封面即可。学习C ++没有其他合理的方法。

关于将结构写入文件主题通常称为“序列化”,并处理将活动对象转换为死字节序列(写入文件或通过网络发送)和反向的稍微更普遍的问题。将字节序列转换回活动对象的问题“反序列化”(在同一系统上,在另一个相同的系统上,甚至在不同的系统上)。

这个问题有很多方面,例如,如果您关心的是系统之间的可移植性,速度,字节序列的大小,重新加载字节序列的能力,当您的类略有不同时,由于您进化了程序而保存回来的字节序列(版本)。

你能做的最简单的事情就是fwrite文件中的东西,但这通常只是在C ++中无意义,并且由于很多原因,即使技术上可行,也是一种可怕的方式。例如,您不能直接fwrite std::vector个对象,并希望将其读回来。

答案 2 :(得分:0)

我认为你需要这样的东西:

template<typename T>
std::ostream& operator << (std::ostream& out, const std::vector<T*>& elements)
{
  for (size_t i = 0; i < elements.size(); i++)
    out << elements[i] << ", ";
  return out << std::endl;
}