0

这是我的代码文件:

主文件

#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;
}

汽车.h

#ifndef CAR_H
#define CAR_H

#include <iostream>
using namespace std;

#include "Engine.h"

class Car {
public:
   Car(int);
   virtual ~Car();
   void serialize(ostream& s) {
      engine.serialize(s);
      s << ' ' << yearModel;
   } 
   void unserialize(istream& s) {
      engine.unserialize(s);
      s >> yearModel;
   }
private:
   Engine engine;
   int yearModel;
};

#endif /* CAR_H */

汽车.cpp

#include "Car.h"

Car::Car(int year) {
   yearModel = year;
}

Car::~Car() {
}

引擎.h

#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 */

引擎.cpp

#include "Engine.h"

Engine::Engine() {
   engineType = 1;
}

Engine::~Engine() {
}

我想要在 main.cpp 中做的是将创建的 Car 对象保存到 file.txt 并稍后从那里读取它。这究竟是如何工作的?例如:如何调用 Car 类中的序列化函数?

如果我听起来像个菜鸟,我很抱歉,但是整个连载对我来说还是很新鲜的。

编辑:当我在所有序列化和反序列化函数前面添加“void”时,代码现在编译。

4

1 回答 1

3

这与序列化无关:函数需要返回类型,即使它是void. 所以这是错误的:

serialize(ostream& s) // look, no return type.

您可能需要返回void

void serialize(ostream& s) { /* code as before */ }

或通过引用返回流以允许链接:

ostream& serialize(ostream& s) {
  return s << ' ' << engineType;
} 
于 2013-11-08T11:09:33.780 回答