C++ 序列化在C+中究竟是如何工作的+;?
以下是我的代码文件: main.cppC++ 序列化在C+中究竟是如何工作的+;?,c++,serialization,file-io,C++,Serialization,File Io,以下是我的代码文件: main.cpp #include <iostream> #include <fstream> #include "Car.h" #include "Engine.h" using namespace std; int main() { Car* car = new Car(1984); /* do something here */ delete car; return 0; } 引擎 #ifndef ENGINE
#include <iostream>
#include <fstream>
#include "Car.h"
#include "Engine.h"
using namespace std;
int main() {
Car* car = new Car(1984);
/* do something here */
delete car;
return 0;
}
引擎
#ifndef ENGINE_H
#define ENGINE_H
#include <iostream>
using namespace std;
class Engine {
public:
Engine();
virtual ~Engine();
void serialize(ostream& s) {
s << ' ' << engineType;
}
void unserialize(istream& s) {
s >> engineType;
}
private:
int engineType;
};
#endif /* ENGINE_H */
我想在main.cpp中做的是将创建的Car对象保存到file.txt,然后从那里读取它。这到底是怎么回事?例如:如何在Car类中调用序列化函数
如果我听起来像个傻瓜,我很抱歉,但这整件序列化的事情对我来说是相当新鲜的
编辑:当我在所有序列化和非序列化函数前面添加“void”时,代码现在可以编译了。这与序列化无关:函数需要返回类型,即使它是
void
。所以这是错误的:
serialize(ostream& s) // look, no return type.
您可能需要返回void
void serialize(ostream& s) { /* code as before */ }
或通过引用返回流以允许链接:
ostream& serialize(ostream& s) {
return s << ' ' << engineType;
}
ostream&serialize(ostream&s){
returns s这与序列化无关:函数需要返回类型,即使它是void
。因此这是错误的:
serialize(ostream& s) // look, no return type.
您可能需要返回void
void serialize(ostream& s) { /* code as before */ }
或通过引用返回流以允许链接:
ostream& serialize(ostream& s) {
return s << ' ' << engineType;
}
ostream&serialize(ostream&s){
returns s这与序列化无关:函数需要返回类型,即使它是void
。因此这是错误的:
serialize(ostream& s) // look, no return type.
您可能需要返回void
void serialize(ostream& s) { /* code as before */ }
或通过引用返回流以允许链接:
ostream& serialize(ostream& s) {
return s << ' ' << engineType;
}
ostream&serialize(ostream&s){
returns s这与序列化无关:函数需要返回类型,即使它是void
。因此这是错误的:
serialize(ostream& s) // look, no return type.
您可能需要返回void
void serialize(ostream& s) { /* code as before */ }
或通过引用返回流以允许链接:
ostream& serialize(ostream& s) {
return s << ' ' << engineType;
}
ostream&serialize(ostream&s){
返回S BTW,您可以考虑文本格式的串行化(例如,在使用中,等等)。注意:<代码> CAR*CAR=新车(1984);/*在这里做某事*/Delk Car;返回0;< /C> > java程序员(为什么不简单地<代码> Car Car(1984);/*在这里做某事*/Read 0;< /Cuff>)(参见(使用箭头键或PGUP/PGDN导航)BTW,您可以考虑文本格式的串行化(例如,在使用中,等等),并且可以考虑:<代码> CAR*CAR=新车(1984);/*在这里做某事*/Delk Car;返回0;前java程序员(为什么不简单地<代码> Car Car(1984))/*在这里做某事* /返回0;< /代码>(参见(使用箭头键或PGUP/PGDN导航))BTW,您可以考虑文本格式的串行化(例如,在使用中,等等),并且您也可以考虑或……注意:<代码> CAR*CAR=新车(1984)/**在这里做某事*/删除Car;返回0;<代码>前java程序员?为什么不简单地<代码> Car Car(1984);/*在这里做某事*/返回0;< /Cord>(见(使用箭头键或PGUP/PGDN导航))BTW,您可以考虑以文本格式序列化(例如,在使用中,等等)。你也可以考虑或等等…注:<代码> CAR*CAR=新车(1984);/*在这里做某事*/Delk Car;返回0;前java程序员(为什么不简单地<代码> Car Car(1984);/*在这里做某事*/返回0;< /代码>(见使用箭头键或PGUP/PGDN导航))谢谢!在函数前面添加void类型修复了问题。谢谢!在函数前面添加void类型修复了问题。谢谢!在函数前面添加void类型修复了问题。谢谢!在函数前面添加void类型修复了问题。