构造函数正在调用使用当前类类型的函数

时间:2018-11-02 11:27:00

标签: c++ constructor

0

构造函数体内的函数NavCal(int in){ read(in, *this) } //constructor for NavCal class 的第二个参数是对void read(int, &Navcal)类型对象的引用。

构造函数的定义在NavCal类之外并且在NavCal函数之下时,没有任何问题。但是目前,我必须在read类中定义构造函数。在NavCal类上方声明read函数的同时,编译器在看到前向声明时将无法理解NavCal类是什么。

问:如何在将构造函数的定义保留在类内的同时解决此不良循环?

请在下面输入代码段

NavCal

1 个答案:

答案 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来保存不必要的包含(然后传播!)。因此,这是有争议的。 :)