C ++将一个函数放在一个单独的命名空间中

时间:2016-12-19 01:36:56

标签: c++ function namespaces friend

我的代码存在问题。

我有一个名为Engine的课程:

// Engine.h
#include "SaveLoad.h"

class Engine {
    friend void SaveLoad::save(Engine& engine);
    friend void SaveLoad::load(Engine& engine);
public:
...

这里的关注点是我希望函数save()和load()能够自由地访问和操作Engine的私有数据成员,这就是我为他们辩护的原因。 SaveLoad实际上是另一个头文件中的命名空间,如下所示:

// SaveLoad.h
#include "Engine.h"

namespace SaveLoad {
    void save(Engine& engine);
    void load(Engine& engine);
}

到目前为止一切似乎都很好。接下来,我从Engine的构造函数中调用load()函数来加载应用程序的已保存数据:

// Engine.cpp
Engine::Engine(...) {
    ...
    SaveLoad::load(*this);
}

我已将Engine传递给load()函数,因此load()可以在启动应用程序时更新Engine的数据成员。

编译完成后,我得到了22个错误消息,有些看似荒谬,有些则令人困惑。其中一些错误是:

  • '引擎'未声明的标识符 - saveload.h
  • '保存'非法使用'void'类型 - saveload.h
  • 'load'非法使用'void'类型 - saveload.h
  • 'SaveLoad :: save'不是函数 - engine.h
  • 'SaveLoad :: load'不是函数 - engine.h
  • 'SaveLoad'不是类或命名空间 - engine.h

并指向SaveLoad :: load(* this)行:

  • term不评估为采用1参数的函数 - engine.cpp

我猜这与我正在尝试使用属于命名空间而不是类的函数的事实有关,或者它与#includes有关,但我真的在外面关于玩代码的想法。

0 个答案:

没有答案