首页 > 解决方案 > 如何在文件之间共享全局类实例?

问题描述

我有一个类 myClass,它被分成一个 .h 和 .cpp 文件。然后我有一个 main.cpp 文件,我在其中声明了一个 myClass 的全局实例

myClass class1(0,0);

我还有其他一些使用 class1 的 cpp 文件,例如 Funcs.cpp。因此,我创建了一个外部文件 extern.h,并将 myClass 实例也声明为 extern:

extern myClass class1;

myClass 有两个可用的构造函数,一个接受两个参数,另一个接受三个(重载)。没有不接受参数的构造函数。有两个参数的构造函数是这样的:

myClass:myClass(int id, int mode);

我的问题是我收到以下错误消息:

标识符 myClass 未定义“extern myClass class1”

...即使我在 main.cpp、myClass.cpp 和 extern.h 中都包含了 myClass.h。

在多个 cpp 文件之间共享 myClass 的全局实例的正确方法是什么?我通读了声明外部类对象的问题,不同之处在于 myClass 有两个参数,并且我的全局实例是在 main.cpp 而不是 myClass.cpp 中声明的。

标签: c++classexternc++98

解决方案


问题可能是包含文件的顺序。编译器逐行可靠地处理每个编译单元,包括 .h 文件位置的 .h 文件内容#include

这意味着您必须在 extern.h 之前包含 myclass.h:

#include "myclass.h"
#include "extern.h"

推荐阅读