在链接之前声明要使用的类成员函数

时间:2012-05-18 14:24:34

标签: c++ compilation linker

我想使用其他模块中存在的类,并且可以在链接中使用。头文件的大小很大,所以我不想在当前模块中包含头文件。

我正试图通过

转发声明类
  
    

class foo;
      int foo :: getValue();

  

这里getValue()是我想要使用的foo的成员函数。

现在,当我编译代码时,我在链接之前得到了编译错误

error: forward declaration of 'struct foo'

我在这里缺少什么?

谢谢,

2 个答案:

答案 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;
};

尝试使用此技术以您指示的方式转发声明类内部,并且需要包含类头。