【问题标题】:Why here announces the announced class agian?为什么这里又宣布了宣布的班级?
【发布时间】:2017-12-28 09:01:08
【问题描述】:

在一个项目中,在一个文件中,已经定义了“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];}
};

但在另一个名为“CoarseInitializer.h”的文件中,它显示为:

namespace dso
{
struct CalibHessian;
struct FrameHessian;
...
}

它对“CalibHessian”类没有任何新意,只是重新宣布了它。而且它不包括相应的标题。但是在“CoarseInitializer.cpp”文件中,现在它包含了“CalibHessian.h”的标题。

我想知道是否有必要重新宣布?它是干什么用的?

【问题讨论】:

  • 搜索并阅读前向声明

标签: c++ class header


【解决方案1】:

前向声明是为了编译者。这似乎不是必需的,而是首选。

所以这个问题的答案不是必须的,而是为了实现成功。

感谢@Some程序员老兄的提示!

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多