C++ `.';不能出现在常量表达式中
我得到以下错误:C++ `.';不能出现在常量表达式中,c++,templates,C++,Templates,我得到以下错误: `.' cannot appear in a constant-expression 对于此功能(第4行): bool覆盖(常量区域和其他)常量{ const Region&me=*这个; for(无符号d=0;dother[d].min | me[d].max) 如果没有重载[],则必须将me、其他等声明为数组才能使代码有效 这可能会失败,因为您尚未定义运算符[](未签名)const.我还建议您使用std::size\t或int作为循环变量;只看到unsigned是非常少见
`.' cannot appear in a constant-expression
对于此功能(第4行):
bool覆盖(常量区域和其他)常量{
const Region&me=*这个;
for(无符号d=0;dother[d].min | me[d].max
谁能解释一下这个问题吗
编辑:
区域的定义是:
template <typename C, typename V, unsigned D>
class Region : public boost::array<Detail::Range<C>,D>
模板
类区域:publicboost::array
当
范围
有最小值
和最大值
变量时。我假设此操作失败,因为[]
运算符不是对变量me
和其他
的有效操作
- 是否在
类上重载了区域
操作符?如果是,它是否返回一个实际包含这些[]
和min
成员的对象?-重载操作符是否返回一个对象、一个引用对象或一个指向对象的指针?(在最后一种情况下,您需要将max
替换为
)->
- 如果没有重载
,则必须将[]
、me
等声明为数组才能使代码有效其他
std::size\t
或int
作为循环变量;只看到unsigned
是非常少见的。但是,由于您使用的是unsigned类型,所以逻辑选择是使用std::size\t
。您也可以尝试调用此->运算符[](d),而不是我[d]作为一个健全性检查,尽管假设您的类实现了适当的运算符重载,您所拥有的应该可以正常工作。如果stakx的答案不够充分,您可能需要查看“min”和“max”变量。可能存在一些预处理器定义,阻止整个过程正常工作
尝试添加
#undef min
#undef max
在您的代码之前,查看错误是否存在。尝试您的代码会告诉我,编译器的
me[d].max
part。因此点的问题是假的。相反,编译器的比较运算符有问题。只要还原比较,编译器错误就会神奇地消失:
if (me[i].min > other[i].min || other[i].max > me[i].max) {
return false;
}
[]
运算符重载(继承自boost::array
)。
if (me[i].min > other[i].min || other[i].max > me[i].max) {
return false;
}