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

C++ 使用在cpp文件中创建的类作为头文件中的参数类型,c++,C++,我正在浏览一些代码,这些代码有点没有条理。 我想使用在cpp文件中创建的类作为其头文件中的参数类型。我知道这个类需要在标题中定义,但我现在正在这里寻找一个简短的方法。这就是我所拥有的 filename: foo.cpp class bar { } 现在是标题 filename: foo.h class teacher { public: void dosomething(bar b) { ///<-----Incomplete type. b.work();

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

filename: foo.cpp

class bar {
} 
现在是标题

filename: foo.h

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

除了将
类移动到头文件

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

文件:bar.hh 文件:foo.hh
假设您不做任何依赖于它是一个完整类型的事情,您可以在标题中向前声明类型
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
类型定义的
bar.hpp
文件,并将其包含到
foo.hpp


例如,考虑任何包含
foo.hpp
的代码(除了
foo.cpp
)都将无法调用
teacher::dosomething(bar)
,因为它不会对
bar
有任何定义“解决此问题的最简单方法是什么”-添加一个包含“bar”定义的包含项1.我不知道那是什么意思?我该怎么做呢?是的,我把实现移到了一个cpp文件中,只是向前声明了类型
#include "bar.hh"
class teacher 
{
public:
   void dosomething(bar b) 
{
     b.work();  
   }
}
// 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();
}