//--- инициализация всех полей структуры нулевым значениемMqlTradeRequest request={0};
另一方面,你在声明时,试图初始化一个数组而不是一个简单的变量。我在《手册》中发现了这个例子。
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };
Если размер инициализируемого массива не указан, то он
определяется компилятором, исходя из размера инициализирующей последовательности.
MqlRates mrate[];//массив нулевого размера
使用ArrayResize和ArrayInitialize。
通常使用CopyRates这个结构。
雷纳特说这样做比较好。
让我们试着去弄清楚。在我印象中,Renat说的是初始化一个简单的变量,而不是一个数组。与战斗类似的例子出现在《参考手册》中。
另一方面,你在声明时,试图初始化一个数组而不是一个简单的变量。我在《手册》中发现了这个例子。
这里的数组是用有限的数值初始化的,解释说编译器是依靠这些数值的数量来决定这样一个数组的大小。我懒得去检查--例子中数组f[]的大小很可能是6。
在你的样本中,{0}初始化序列的 大小为1。因此,编译器很可能将数组mrate[]的大小定义为1。在这里,为了方便起见,这样说明。
会不会造成错误?我感到很困惑。斯万清楚地解释了这一点。我采取了错误的结构。它根本不需要被初始化,因为它取值。你需要初始化那些给出它们的值的。我错了。
嗯,这是最主要的事情。 关于雷娜特的问题本身就很有趣,所以我也想明白了一些事情。
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; 不是动态阵列。
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 }; 非动态阵列。
double f[]本身就是一个动态数组。在创建过程中,正是这个数组被声明。我还没有分析用有限初始化序列 初始化后是否会停止动态。你在上面发现的主要情况是,声明的数组在初始化后获得了一个特定的大小。
你是说显式初始化的结果中的动态数组不再是动态的,即失去其动态状态和属性?- 也许是这样,但我很怀疑。 问题:基于什么理由(为什么)动态数组 double f[] 不再是一个动态数组?
double f[]本身就是一个动态数组。它是在创造时宣布的。我没有调查过它是否在被最后的初始化序列 初始化后就不再是动态的。你在上面发现的主要情况是,声明的数组在初始化后获得了一个特定的大小。
你是说显式初始化的结果中的动态数组不再是动态的,即失去其动态状态和属性?- 也许是这样,那么问题是:为什么?
整个问题的关键是,我们MKL与现实世界有点 "隔绝"),在这种情况下,编译器为我们决定。如果它看到它。
创建一个静态数组(没有调整大小的能力)。如果它看到它。
double f[];
在全局内存中创建结构体MqlArrayObject(它表现为一个动态数组)。因此,你不能在声明后初始化一个数组 (double f[]; f = {6};)
P.S:所有写的都是我的IMHO,我可能在某个地方错了。
一个傻瓜的问题:如果编译器看到字符串
它最初会创建一个静态数组而不是动态数组?
有一条规则:"当声明一个动态数组(在第一对方括号里有一个未指定的值 的数组)时,编译器会自动创建一个结构 变量MqlArrayObject(一个动态数组对象)并提供正确的初始化代码。还是最终初始化序列 的存在等于 "明确指定了所有重要的数组尺寸",并导致创建一个静态数组?
一个傻瓜的问题: 如果编译器看到字符串
它最初会创建一个静态数组而不是动态数组?
有一条规则:"当声明一个动态数组(在第一对方括号里有一个未指定的值 的数组)时,编译器会自动创建一个结构 变量MqlArrayObject(一个动态数组对象)并提供正确的初始化代码。还是最终初始化序列 的存在等于 "明确指定了所有重要的数组尺寸",并导致创建一个静态数组?
检查它是否很弱?
;)
你不觉得你应该检查一下吗?
;)
目前,它很弱。我今天晚上才会到终点站。否则我对220V电压的回答听起来就不一样了,你懂的 :)我在《手册》中找不到这些信息。也许我看得不够仔细,但我是一丝不苟。
好了,我已经离开了终端。:) 我也在航站楼外。
检查过的元素 - 试图使用ArrayResize(...)。