Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ `.';不能出现在常量表达式中_C++_Templates - Fatal编程技术网

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
    其他
    等声明为数组才能使代码有效


这可能会失败,因为您尚未定义运算符[](未签名)const.我还建议您使用
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;
}