是否有可能在MQL4中实现一个单子模式。 - 页 2

 
但由于某些原因,在编译时出现了很多错误。怎么了?

如果你不知道基础知识,我们还能谈什么守护神,你甚至不能正确地创建一个静态类字段。

(在hubrabs上有很多关于singleton的文章,有什么用,怎么用,有什么问题)。

是单子还是静态类?
使用单子模式
 
ALXIMIKS:

(Hubra上有很多关于singleton的文章,以及它的用途,如何使用,还有它的问题)

单子类还是静态类?
使用Singleton模式。

你认为我没有遇到过这种情况吗?我还没有完全弄清楚它是如何工作的。事情是这样的。但事实证明,我不需要一个单子。所以我就用静态成员来做。

ALXIMIKS

如果你不知道基础知识,我们怎么能谈论父权,你甚至不能正确地创建一个静态类字段。

如果你知道怎么做,你可以纠正它。昨天我根据文件写了。但也有很多错误。像这样。

struct Symbol_Properties
{
   static datetime    gdt_Quote;           // Время поступления последней котировки
   static double      gda_Price [2];       // Текущие рыночные цены (0 - Bid, 1- Ask)
   static double      gd_Spread;           // Размер спреда в пунктах
   static double      gd_Swap;             // Своп
   static double      gd_Comission;        // Комиссия
   static double      gd_Pt;               // Величина одного пункта
   static int         gi_Digits;           // Количество знаков в цене после запятой
   static int         gi_StopLevel;        // Минимально-допустимый уровень стоп-лосса/тейк-профита в пунктах
   static int         gi_FreezLevel;       // Уровень заморозки ордеров в пунктах
};
int Symbol_Properties::gdt_Quote = 0;
int Symbol_Properties::gda_Price = 0;
int Symbol_Properties::gd_Spread = 0;
int Symbol_Properties::gd_Swap = 0;
int Symbol_Properties::gd_Comission = 0;
int Symbol_Properties::gd_Pt = 0;
int Symbol_Properties::gi_Digits = 0;
int Symbol_Properties::gi_StopLevel = 0;
int Symbol_Properties::gi_FreezLevel = 0;

下一步是什么?

 
static double       gd_Spread; 
int  Symbol_Properties::gd_Spread = 0;
不为任何事伤心?
 
Естественно, создавать несколько объектов в разных классах данных структур крайне не рекомендуется.
告诉我这是怎么一回事。再把上面这句话翻译得更清楚些,唉,我什么都不懂,谢谢你。
 

我扔错了。总之,目前的版本在这里是正确的。

struct Symbol_Properties
{
   static datetime    gdt_Quote;           // Время поступления последней котировки
   static double      gda_Price [2];       // Текущие рыночные цены (0 - Bid, 1- Ask)
   static double      gd_Spread;           // Размер спреда в пунктах
   static double      gd_Swap;             // Своп
   static double      gd_Comission;        // Комиссия
   static double      gd_Pt;               // Величина одного пункта
   static int         gi_Digits;           // Количество знаков в цене после запятой
   static int         gi_StopLevel;        // Минимально-допустимый уровень стоп-лосса/тейк-профита в пунктах
   static int         gi_FreezLevel;       // Уровень заморозки ордеров в пунктах
};

datetime   Symbol_Properties::gdt_Quote = 0;
double     Symbol_Properties::gda_Price [2] = {0.0, 0.0};
double     Symbol_Properties::gd_Spread = 0;
double     Symbol_Properties::gd_Swap = 0;
double     Symbol_Properties::gd_Comission = 0;
double     Symbol_Properties::gd_Pt = 0;
int        Symbol_Properties::gi_Digits = 0;
int        Symbol_Properties::gi_StopLevel = 0;
int        Symbol_Properties::gi_FreezLevel = 0;

我想现在我必须用这么长的名字来指代每个静态变量?

Symbol_Properties::gd_Spread = 0;

还是更容易实现,在描述了变量初始化 结构后,当它被初始化 时,相应的静态成员应该被分配给某个类型的变量。

double Spread = Symbol_Properties::gd_Spread = 0;

然后在代码中通过这个变量引用相应的静态变量,对吗?

 
hoz:

是的,嗯...最主要的是,瓦迪姆 知道 :)))))

是的,这就是正常的那种对话。

问:我的朋友向我推荐了一些糖果。这正是我所需要的!

我:(不解...这与糖果有什么关系?也许B要去参加朋友的生日聚会,或者想请孩子们吃饭,也许是他自己的或别人的?也许他去做生意了,现在正在卖糖果。也许这是白俄罗斯的最后一种糖果,B现在是垄断者。如果B错过了甜食怎么办?在 "为什么要吃糖,怎么吃 "这个问题上,我脑子里还闪过很多其他想法。再一次,像以前对B那样,我的心灵感应能力让我失望。没有想到什么)。

没有任何线索。

以防万一。在没有得到参与对话的每个人同意的情况下,发布对话是不礼貌的。这是很刻薄的。
 

1.这一切是为了什么?

2.有两种方法可以访问一个类的静态字段(结构是默认和继承的公共访问类)。

(a) 通过类的命名空间--例如,Symbol_Properties::gd_Spread

(double Spread = Symbol_Properties::gd_Spread) -Spread等于Symbol_Properties类中的gd_Spread。

(double Spread = Symbol_Properties::gd_Spread =0)来自Symbol_Properties类gd_SpreadSpread 变成等于0

b) 创建一个类的对象(例如,Symbol_Properties obj;),并通过这个对象把它作为类的一个通常的字段来引用。

(double Spread = obj.gd_Spread)

(double Spread = obj.gd_Spread =0)

 
ALXIMIKS:

1.这一切是为了什么?

方便...毕竟,如果这些变量是在单个实例中使用,我为什么要创建一个对象呢?此外,在引用一个变量时,如果VARIABLE.VARIABLE NAME,阅读代码 会更方便。

ALXIMIKS:

2.有两种方法可以访问类的静态字段(结构是一个默认为公共访问的类,并有继承权)。

(a) 通过类的命名空间--例如,Symbol_Properties::gd_Spread

(double Spread = Symbol_Properties::gd_Spread) -Spread等于Symbol_Properties类中的gd_Spread。

(double Spread = Symbol_Properties::gd_Spread =0)- 来自Symbol_Propertiesgd_SpreadSpread 变为等于0

正是如此!这就是我这样做的原因。我立即将指向该结构变量的变量初始化为零,然后将其永久地保存在内存中。这是符合逻辑的,因为这些变量是在一个实例中需要的。这就是为什么在这种情况下没有理由创建不同的对象。毕竟,它是符合逻辑的...你不同意我的观点吗?

ALXIMIKS:

b) 创建一个类对象(如Symbol_Properties obj;),并通过这个对象将其作为一个普通的类字段来引用。

那么这些变量将不是静态的,而且不能保证它们在程序运行时不保留其数值。
 
STATIC VARIABLE 或常数等有什么问题?
 

STATE VARIABLE 没有让我满意,因为它们被用于不同的类别。所以我把它们归类在一起。

不喜欢常量,因为常量不会改变其值,而这些变量应该能够改变其值。