C++ 为什么在这里宣布了宣布的课程?

C++ 为什么在这里宣布了宣布的课程?,c++,class,header,C++,Class,Header,在一个项目中,在一个文件中,已经定义了“CalibHessian”: struct CalibHessian { EIGEN_MAKE_ALIGNED_OPERATOR_NEW; static int instanceCounter; VecC value_zero; VecC value_scaled; VecCf value_scaledf; VecCf value_scaledi; VecC value; VecC step

在一个项目中,在一个文件中,已经定义了“CalibHessian”:

struct CalibHessian
{
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
    static int instanceCounter;

    VecC value_zero;
    VecC value_scaled;
    VecCf value_scaledf;
    VecCf value_scaledi;
    VecC value;
    VecC step;
    VecC step_backup;
    VecC value_backup;
    VecC value_minus_value_zero;

    inline ~CalibHessian() {instanceCounter--;}
    inline CalibHessian()
    {

        VecC initial_value = VecC::Zero();
        initial_value[0] = fxG[0];
        initial_value[1] = fyG[0];
        initial_value[2] = cxG[0];
        initial_value[3] = cyG[0];

        setValueScaled(initial_value);
        value_zero = value;
        value_minus_value_zero.setZero();

        instanceCounter++;
        for(int i=0;i<256;i++)
            Binv[i] = B[i] = i;     // set gamma function to identity
    };


    // normal mode: use the optimized parameters everywhere!
    inline float& fxl() {return value_scaledf[0];}
    inline float& fyl() {return value_scaledf[1];}
    inline float& cxl() {return value_scaledf[2];}
    inline float& cyl() {return value_scaledf[3];}
    inline float& fxli() {return value_scaledi[0];}
    inline float& fyli() {return value_scaledi[1];}
    inline float& cxli() {return value_scaledi[2];}
    inline float& cyli() {return value_scaledi[3];}
};
它对“CalibHessian”这门课并没有什么新鲜事,只是重新宣布了它。而且它没有包含相应的标题。但在文件“grossInitializer.cpp”中,现在它包含了“CalibHessian.h”的头


我想知道的是,有必要重新宣布吗?它用于什么?

第一个文件是
CalibHessian
的定义。头文件(grossInitializer.h)的声明为
CalibHessian


定义是确定名称行为方式的代码。声明只是一个声明,说明名称存在。将声明放在头文件中是因为这是告诉文件在其他文件中是否存在名称的方式。

转发声明是为了编译器。这似乎不是必需的,但更可取

因此,这个问题的答案不是必须的,而是为了圆满成功

谢谢@someprogrammerdude的提示

搜索并阅读转发声明。
namespace dso
{
struct CalibHessian;
struct FrameHessian;
...
}