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