我想使用一个存在于其他模块中并且可用于链接的类。头文件的大小很大,所以我不想在当前模块中包含头文件。
我正在尝试通过转发声明类
类 foo;
int foo::getValue();
这里 getValue() 是我要使用的 foo 的成员函数。
现在,当我编译代码时,在链接为之前出现编译错误
error: forward declaration of 'struct foo'
我在这里想念什么?
谢谢,
我想使用一个存在于其他模块中并且可用于链接的类。头文件的大小很大,所以我不想在当前模块中包含头文件。
我正在尝试通过转发声明类
类 foo;
int foo::getValue();
这里 getValue() 是我要使用的 foo 的成员函数。
现在,当我编译代码时,在链接为之前出现编译错误
error: forward declaration of 'struct foo'
我在这里想念什么?
谢谢,
您不能转发声明类成员,您需要包含整个标题。
这里正确的做法是减小标头的大小。如果它只包含类定义,则保持原样。如果没有,则有可能将其分解为多个标题。
如果类定义很大,则表明您的设计有缺陷并且可能会被破坏。
仅当您不需要了解类的内部结构(即成员和/或大小)时,才可以使用类的前向声明。
这种技术的典型使用涉及类指针或引用:
class included_class;
class encapsulating_class
{
public:
void some_method(const& included_class_pointer) const;
private:
included_class * included_class_pointer;
};
使用此技术无法尝试以您指示的方式转发声明类内部,并且需要包含类标头。