无法使用自定义定义的结构的属性

时间:2019-07-19 03:45:54

标签: c++ struct header

我在标头中定义了一个结构,

struct AABB2 {
    Float xMin, xMax, yMin, yMax;
    AABB2(Float xMin_ = Float(0.0f), Float xMax_ = Float(0.0f), Float yMin_ = Float(0.0f), Float yMax_ = Float(0.0f)) :
        xMin(xMin_), xMax(xMax_), yMin(yMin_), yMax(yMax_) {}
};

在cpp文件中,我具有这样的功能:

编辑: 抱歉,我第一次发布了错误的功能!

AABB2 combineAABB(const AABB2 &aabb1, const AABB2 &aabb2) {
    AABB2 aabb;
    aabb.xMin = std::min(aabb1.xMin, aabb2.xMin);
    aabb.xMax = std::max(aabb1.xMax, aabb2.xMax);
    aabb.yMin = std::min(aabb1.yMin, aabb2.yMin);
    aabb.yMax = std::max(aabb1.yMax, aabb2.yMax);
    return aabb;
}

AABB2 combineAABB(const AABB2 &aabb1, const AABB2 &aabb2, const AABB2 &aabb3, const AABB2 &aabb4) {
    AABB2 aabbA = combineAABB(aabb1, aabb2);
    AABB2 aabbB = combineAABB(aabb3, aabb4);
    return combineAABB(aabbA, aabbB);
}


// the call to the combine function

 vector<AABB2> &angularBBRow = angularBBLayer[i];

for (int j = 0; j < currentWidth; j++) {
                AABB2 aabb1 = angularBB[currentLayer - 1][i * 2 + 0][j * 2 + 0];
                AABB2 aabb2 = angularBB[currentLayer - 1][i * 2 + 1][j * 2 + 0];
                AABB2 aabb3 = angularBB[currentLayer - 1][i * 2 + 1][j * 2 + 1];
                AABB2 aabb4 = angularBB[currentLayer - 1][i * 2 + 0][j * 2 + 1];

        angularBBRow.push_back(combineAABB(aabb1, aabb2, aabb3, aabb4));
}


但是由于某些原因,为什么我尝试调用此函数以实际使用它,我收到一条错误消息,提示错误:“ mitsuba :: AABB2”没有名为“ xMin”的成员

其他信息:

mitsuba是一个渲染引擎,我正尝试在其中实现它,所以这就是为什么它出现在错误消息中的原因。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

mitsuba渲染引擎为AABB2定义了自己的类型:

typedef TAABB<Point2> AABB2

很明显,错误消息引用的是这种类型,它位于mitsuba名称空间中。当编译器尝试解析AABB2的类型时,它是在选择mitsuba的版本,而不是您的版本。

尽管我们努力要求您仍未显示适当的代码,但您很有可能正在执行以下其中一项操作:

  • 忘记包含定义AABB2的标题
  • 通过诸如using namespace mitsuba;之类的调用导入整个mitsuba名称空间
  • 在您自己的名称空间中定义AABB2,而忘记在您的类型中指定

您可以通过解决这些问题来解决问题。另外,您可以尝试将结构重命名为mitsuba不用的结构。