我收到以下错误:
`.' cannot appear in a constant-expression
此功能(第4行):
bool Covers(const Region<C,V,D>& other) const {
const Region& me = *this;
for (unsigned d = 0; d < D; d++) {
if (me[d].min > other[d].min || me[d].max < other[d].max) {
return false;
}
}
有人可以解释这个问题吗?
修改
Region的定义是:
template <typename C, typename V, unsigned D>
class Region : public boost::array<Detail::Range<C>,D>
当Range
有min
和max
个变量时。
答案 0 :(得分:3)
如果stakx的答案不够,您可能需要查看“min”和“max”变量。可能存在一些预处理器定义,阻止整个工作。
尝试添加
#undef min
#undef max
在您的代码之前,查看错误是否成立。
答案 1 :(得分:2)
我认为这是失败的,因为[]
运算符不是对变量me
,other
等的有效操作。
您是否重载了[]
课程中的Region<>
运算符?如果是,它是否返回实际拥有这些min
和max
成员的对象? - 重载的运算符是返回对象,按引用引用的对象还是指向对象的指针? (在最后一种情况下,您需要将.
替换为->
。)
如果没有重载[]
,则me
,other
等必须声明为数组,以使您的代码有效。
答案 2 :(得分:2)
试用你的代码告诉我,编译器有me[d].max < other[d].max
部分的问题。所以点的问题是假的。相反,编译器的比较运算符存在问题。只是恢复比较,编译器错误就会神奇地消失:
if (me[i].min > other[i].min || other[i].max > me[i].max) {
return false;
}
答案 3 :(得分:0)
这可能是失败的,因为你还没有定义operator [](unsigned)const。我还建议您使用std::size_t
或int
作为循环变量;看到unsigned
是非常罕见的。但是,由于您使用的是无符号类型,因此逻辑选择是使用std::size_t
。您也可以尝试调用this-&gt;运算符[](d)而不是我[d]作为一个完整性检查,尽管假设你的类实现了适当的运算符重载,你应该可以正常工作。