0
构造函数体内的函数NavCal(int in){ read(in, *this) } //constructor for NavCal class
的第二个参数是对void read(int, &Navcal)
类型对象的引用。
构造函数的定义在NavCal
类之外并且在NavCal
函数之下时,没有任何问题。但是目前,我必须在read
类中定义构造函数。在NavCal
类上方声明read
函数的同时,编译器在看到前向声明时将无法理解NavCal
类是什么。
问:如何在将构造函数的定义保留在类内的同时解决此不良循环?
请在下面输入代码段
NavCal
答案 0 :(得分:3)
虽然在NavCal类上方向前声明read函数,但编译器在看到前向声明时将无法理解NavCal类是什么。
因此,向前声明NavCal
!
struct NavCal;
void read(int, NavCal&);
struct NavCal
{
NavCal() { read(42, *this); }
};
这确实是向前声明的目的。声明功能就像往常一样。
您说对了,我仍然会考虑的另一种可能性是将声明与定义分开:
// NavCal.h
struct NavCal
{
NavCal();
};
// MyReadingStuff.h
#include "NavCal.h"
void read(int, NavCal&);
// NavCal.cpp
#include "NavCal.h"
NavCal::NavCal()
{
read(42, *this);
}
...但是,这并不总是方便/后勤/可能的。
实际上,即使在最后一个示例中,我也可能只是在NavCal
中声明MyReadingStuff.h
来保存不必要的包含(然后传播!)。因此,这是有争议的。 :)