D 在编译时无法读取变量i

D 在编译时无法读取变量i,d,D,我有以下代码: class Set(T){ private T[] values; T get(uint i){ return ((i < values.length) ? T[i] : null); } ... 编译器在return行给出错误:set.d | 9 |错误:编译时无法读取变量i 谁能解释一下,我的代码出了什么问题?谢谢。这就是答案:代码只是引用了错误的变量。它给出错误的原因是T[i]试图从编译时类型列表中获取索引。。。这也需要我在

我有以下代码:

class Set(T){
    private T[] values;

    T get(uint i){
        return ((i < values.length) ? T[i] : null);
    }
...
编译器在
return
行给出错误:
set.d | 9 |错误:编译时无法读取变量i


谁能解释一下,我的代码出了什么问题?谢谢。

这就是答案:代码只是引用了错误的变量。它给出错误的原因是T[i]试图从编译时类型列表中获取索引。。。这也需要我在编译时可用。然而,因为i是一个正则变量,所以它不是。(顺便说一句,您可以有编译时变量-函数的结果可以是CT evaled,或foreach上的静态列表索引,或枚举值。)然而,这里需要的是数组中的运行时索引。。。因此,值是正确的符号,因为它是数据而不是类型


Adam D.Ruppe这就是答案:代码只是引用了错误的变量。它给出错误的原因是T[i]试图从编译时类型列表中获取索引。。。这也需要我在编译时可用。然而,因为i是一个正则变量,所以它不是。(顺便说一句,您可以有编译时变量-函数的结果可以是CT evaled,或foreach上的静态列表索引,或枚举值。)然而,这里需要的是数组中的运行时索引。。。因此,值是正确的符号,因为它是数据而不是类型


Adam D.Ruppe

你确定这就是所有的代码吗?哦,尽管
T[i]
行是错误的,T是一种类型,数组是
values
你可能是指
values[i]
?是的,我指的是values[i],谢谢!这能解决问题吗?如果是这样的话,你可以把它作为一个答案或者别的什么。你确定这就是所有的代码吗?哦,尽管
T[i]
行是错误的,但T是一种类型,数组是
values
你可能是指
values[i]
?是的,我指的是values[i],谢谢!这能解决问题吗?如果是这样的话,你可以把它作为一个答案或者其他任何东西发布。这就是答案:代码只是引用了错误的变量。它给出错误的原因是
T[i]
试图从编译时类型列表中获取索引。。。它也需要
i
在编译时可用。然而,因为
i
是一个正则变量,所以它不是。(顺便说一句,您可以有编译时变量-函数的结果可以是CT evaled,或foreach上的静态列表索引,或
enum
值。)但是,这里需要的是数组中的运行时索引。。。因此,
是正确的符号,因为它是数据而不是类型。对于这个特定的错误,这是一个非常糟糕的错误消息。关于我们是否可以/应该在编译器@AdamD.Ruppe中使用这种特殊情况,您有什么意见吗?呃,也许吧,但很难判断它是否是有意的下标。。。。事实上,这里的T对下标都无效,所以它可能是一个类型错误,不需要特殊的大小写。但是如果它是
T…
,那么这个错误可能是正确的。这就是答案:代码只是引用了错误的变量。它给出错误的原因是
T[i]
试图从编译时类型列表中获取索引。。。它也需要
i
在编译时可用。然而,因为
i
是一个正则变量,所以它不是。(顺便说一句,您可以有编译时变量-函数的结果可以是CT evaled,或foreach上的静态列表索引,或
enum
值。)但是,这里需要的是数组中的运行时索引。。。因此,
是正确的符号,因为它是数据而不是类型。对于这个特定的错误,这是一个非常糟糕的错误消息。关于我们是否可以/应该在编译器@AdamD.Ruppe中使用这种特殊情况,您有什么意见吗?呃,也许吧,但很难判断它是否是有意的下标。。。。事实上,这里的T对下标都无效,所以它可能是一个类型错误,不需要特殊的大小写。但是如果它是
T…
,那么这个错误可能是正确的。
set.Set!(int) A;