C++ 将类的向量写入文件的方法

C++ 将类的向量写入文件的方法,c++,class,file-io,constructor,struct,C++,Class,File Io,Constructor,Struct,我不确定该如何使用这个词,所以我将尝试将其放入代码中。(这有很多错误,我知道它不会编译,只是为了显示我想做什么,因为我无法用文字表达) 使用名称空间std//为了正确起见 福班{ 公众: foo(inta=0,intn=0); 无效材料(INTA); 空洞函数(intn); const int get_函数(){return n;} const int get_stuff(){return a;} 私人: int n,a; }; 结构存储{ public:get_foo(){return vec

我不确定该如何使用这个词,所以我将尝试将其放入代码中。(这有很多错误,我知道它不会编译,只是为了显示我想做什么,因为我无法用文字表达)

使用名称空间std//为了正确起见
福班{
公众:
foo(inta=0,intn=0);
无效材料(INTA);
空洞函数(intn);
const int get_函数(){return n;}
const int get_stuff(){return a;}
私人:
int n,a;
};
结构存储{
public:get_foo(){return vector;}//我不太确定这里的语法,但你明白了
私人:
福福;
}
基本上,我想获取foo类中返回的所有信息,并将其格式化后输出到一个文件中。问题是,我需要在文件中制作很多这样的东西,它必须能够读回这些东西,这样它才有价值。 因此,仅仅将每个连续的foo类附加到文件中是行不通的(至少我不知道如何)


我尝试使用
ostream
来重载
我想您需要这样的东西:

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;
}
struct Store
{
public:
    std::vector<foo> get_foo()
    {
       return f;
    }

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

std::ostream&operator我想您需要这样的东西:

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;
}
struct Store
{
public:
    std::vector<foo> get_foo()
    {
       return f;
    }

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

std::ostream&operator您的代码有许多错误

很多,很明显,你从不读任何C++书籍,只是在试用编译器。

不要那样做。由于许多独立的原因,C++是世界上最糟糕的语言。 不管你有多聪明

<> P>智能化>强>在某些领域中是一个问题>,因为许多C++规则不是一个连贯的逻辑设计的结果,而是历史演进和委员会决策的结果。即使哈里·塞尔登也无法正确预见委员会的决定,你无法推断历史

只要选一本书,从头读到尾。没有其他合理的方法来学习C++。 关于将结构写入文件,该主题通常被称为“序列化”,它关注的是将活动对象转换为死字节序列(写入文件或通过网络发送)的更一般问题,以及将字节序列转换回活动对象的反问题“反序列化”(在同一个系统上,在另一个相同的系统上,甚至在不同的系统上)

这个问题有很多方面,例如,如果您关心的是系统之间的可移植性、速度、字节序列的大小,以及重新加载由于程序(版本控制)而导致类略有不同时保存的字节序列的能力


<>你可以做的最简单的事情就是把代码写在文件中,但是这通常是C++中的废话,而且在很多方面都是一种可怕的方法,即使在技术上是可能的。例如,你不能直接“代码> fDead <代码> >代码> STD::向量对象,希望能读回它。

< P>有很多错误的WI。这是你的密码

很多,很明显,你从不读任何C++书籍,只是在试用编译器。

不要这么做。C++是世界上最糟糕的语言,因为许多独立的原因。 不管你有多聪明

实际上,Smart S< St>在某些领域中是一个问题>,因为许多C++规则不是一个连贯的逻辑设计的结果,而是历史演变和委员会决定的结果。甚至哈里·谢顿也不能正确地预测一个委员会将决定什么,你不能推断历史。 P>只是选择一个并阅读它Cover to Cover商店。没有其他明智的方法来学习C++。 关于将结构写入文件,该主题通常被称为“序列化”,它关注的是将活动对象转换为死字节序列(写入文件或通过网络发送)的更一般问题,以及将字节序列转换回活动对象的反问题“反序列化”(在同一个系统上,在另一个相同的系统上,甚至在不同的系统上)

这个问题有很多方面,例如,如果您关心的是系统之间的可移植性、速度、字节序列的大小,以及重新加载由于程序(版本控制)而导致类略有不同时保存的字节序列的能力


<>你可以做的最简单的事情就是把代码写在文件上,但是这通常是简单的C++中的废话,而且在很多方面都是一种可怕的方法,即使在技术上是可能的。例如,你不能直接“代码> fDead <代码> >代码> STD::向量< /Cord>对象,希望能读回它。

< P>我想你的代码>商店< /CODe> 应该是这样的:

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;
}
struct Store
{
public:
    std::vector<foo> get_foo()
    {
       return f;
    }

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

我认为你的
商店应该是这样的:

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;
}
struct Store
{
public:
    std::vector<foo> get_foo()
    {
       return f;
    }

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

注意:<代码> const GETSUngy(){{n;} /Case>不是标准兼容的C++。语言需要一个类型声明器来声明所有。这个(以及<代码> GETySpIDER()/代码>)应该用<代码> int < /C> >声明。@WhozCraig你是对的,我忘记了函数类型,我使用了const,因为这是我在课堂上看到的示例。我高度怀疑声明应该是
int get_function()const{return n;}
,因为成员没有修改对象的要求。注意:
const get_function(){return n;}不是标准兼容的C++。语言需要一个类型声明器来声明所有。这个(以及<代码> GETySpIDER()/代码>)应该用<代码> int < />代码声明。@WhozCraig你是对的,我忘记了函数类型,我使用了const,因为这是我在课堂上看到的示例。我高度怀疑声明应该是
int get_function()const{return n;}