使用在cpp文件中创建的类作为头文件中的参数类型

时间:2017-10-06 19:12:26

标签: c++

我正在浏览一些有点无组织的代码。 我想在其头文件中使用在cpp文件中创建的类作为参数类型。我知道这个类需要在标题中定义,但我现在正在寻找一个简短的方法。这就是我所拥有的

filename: foo.cpp

class bar {
} 

现在标题

filename: foo.h

class teacher {
public:
   void dosomething(bar b) {  ///<-----Incomplete type.
     b.work();   ///
   }
} 

我尝试以这种方式在标题内声明原型

class foo;
 class teacher {
    public:
       void dosomething(bar b) {  
         b.work();   ///Error no method work for incomplete type.
       }
    } 

除了将bar类移动到头文件

之外,解决此问题的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以在标头中转发声明类型#include "bar.hh" class teacher { public: void dosomething(bar b) { b.work(); } } ,假设您不依赖于它是完整类型。例如,这不起作用:

bar

但这会:

// foo.hpp
class bar;
class teacher {
public:
   void dosomething(bar b) {
     // Will fail, bar is not complete:
     b.work();
   }
};

但是,我建议您创建一个// foo.hpp class bar; class teacher { public: void dosomething(bar b); }; // foo.cpp class bar { public: void work() {} }; void teacher::dosomething(bar b) { b.work(); } 文件,其中包含bar.hpp类型的定义,并bar将其定义为#include

例如,考虑包含foo.hpp的任何代码({1}}除外)将无法调用foo.cpp,因为它没有{{1}的任何定义}}

答案 1 :(得分:0)

我认为这样会更好:

档案:bar.hh

"0.0.0.0"

文件:foo.hh

class bar 
{
...
}