template<typename T> int f( const T& ) { returnsizeof( T ); } class A {}; voidOnStart() { const A * const a = new A; //Error: 'T' - unexpected token f( a ); }
class A { A() { ::ArrayResize( i1, 1 ); } int i1[ ]; int i2[1]; void f1() const { i1[0] = 0; } //нет сообщения ошибки void f2() const { i2[0] = 0; } //Error: 'i2' - member of the constant object cannot be modified
class A { A() { ::ArrayResize( i1, 1 ); } int i1[ ]; int i2[1]; void f1() const { i1[0] = 0; } //нет сообщения ошибки void f2() const { i2[0] = 0; } //Error: 'i2' - member of the constant object cannot be modified
};
f1 関数では,A オブジェクトの状態は変化せず,動的配列 A::i1 の状態が変化し,A::i1 の要素は A オブジェクトに属さない. なぜなら,A::i2 配列は動的ではなく,その要素はすべて A オブジェクトに属しているからです.
コンパイルエラー
int f( const T& ) { return sizeof( T ); }
class A {};
void OnStart()
{
const A * const a = new A; //Error: 'T' - unexpected token
f( a );
}
メタトレーダー4ヘルプのiGator()インジケーターについて で
[in] Источник данных, идентификатор одной из линий индикатора. Mожет быть любой из следующих величин:
MODE_GATORJAW - синяя линия (линия челюсти аллигатора),
MODE_GATORTEETH - красная линия (линия зубов аллигатора),
MODE_GATORLIPS - зеленая линия (линия губ аллигатора).
で、以下はその例です。
double diff=iGator(NULL,0,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_UPPER,1);
データソース MODE_UPPER、ヘルプにエラーがあるとのことですが
コンパイルエラー(というかエラーメッセージ なし)
A() { ::ArrayResize( i1, 1 ); }
int i1[ ];
int i2[1];
void f1() const { i1[0] = 0; } //нет сообщения ошибки
void f2() const { i2[0] = 0; } //Error: 'i2' - member of the constant object cannot be modified
};
マウスボタンクリックイベントを処理する 際に、2つのエラーを発見しました。
1. OnChartEvent()でマウスホイールクリックイベントを処理する。この関数は、マウスの左ボタンをクリックしたとき(押したままでも)、マウスの右ボタンをクリックしたとき(押したままでも)、イベント(id == CHARTEVENT_MOUSE_MOVE)を生成しますが、ホイールをクリックした場合は、押したときだけイベントを生成する、というものです。つまり、中キーを押してすぐに離すと、イベントは発生しないのです
2.マウスの左ボタンが押された(sparam == "1")処理後に、イベントsparam == "0 "が生成されます。マウスの右ボタンをクリックした後(sparam == "2")、なぜかイベントsparam == "0 "が生成されない。すべてのマウスボタンを同じように扱うべきではないでしょうか?ホイールのクリックについては、ポイント1で述べたように、ホイールがクリックされてもイベントは発生しないので、黙認しています。
コードを確認する。
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
return(rates_total);
}
//+------------------------------------------------------------------+
//| Обработка события графика |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
switch(id)
{
case CHARTEVENT_MOUSE_MOVE:
FuncMove(lparam,dparam,sparam);
break;
}
}
//+------------------------------------------------------------------+
//| Функция обработки события перемещения мыши |
//+------------------------------------------------------------------+
void FuncMove(const long lparam,// Х координата
const double dparam,// Y координата
const string sparam // Строковое значение статуса кнопки
)
{
Print(__FUNCTION__,": sparam = "+sparam);
}
//+------------------------------------------------------------------+
//| Функция деинициализации индикатора |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- Отписываемся от события передвижения мыши
ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,false);
}
//+------------------------------------------------------------------+
コンパイルエラー(というかエラーメッセージが 出ない)
A() { ::ArrayResize( i1, 1 ); }
int i1[ ];
int i2[1];
void f1() const { i1[0] = 0; } //нет сообщения ошибки
void f2() const { i2[0] = 0; } //Error: 'i2' - member of the constant object cannot be modified
};
なぜなら,A::i2 配列は動的ではなく,その要素はすべて A オブジェクトに属しているからです.
コンパイルエラー
class B {
int A() { return 0; }
void f( int ) {}
void g() { f(A()); } //Error: 'A' - invalid cast operation
};
ドラツチ質問:モバイルブラウザ(android、apple)で、まだ対応していないユーザーにメッセージを送るにはどうすればよいですか?いくつかの異なるデバイスから見てみましたが、「メッセージを送信する」ボタンも「他の人に追加する」ボタンもどこにもありません。ユーザーのページはこのような感じで、ボタンはありません。
私はずっとそう言っているのですが、今のところ何も言ってきません。
マウスボタンのイベント処理に 2つのエラーを発見。
チェックする。
チャート上の最初の可視バーの数を確認してください: ChartGetInteger( 0,CHART_FIRST_VISIBLE_BAR);
ポイントは、チャートのスクロールを無効にして、最後に表示されたバーを監視している場合、新しいローソクの瞬間に、チャートは動かないのに、何らかの理由でその数字が変わることですTFは、より速くチェックできるようにするため、M1となっています。インジケーターからスタートします。
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Подписываемся на событие движения мыши
ChartSetInteger( 0, CHART_EVENT_MOUSE_MOVE, true );
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
return(rates_total);
}
//+------------------------------------------------------------------+
//| Обработка события графика |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
switch( id )
{
case CHARTEVENT_MOUSE_MOVE:
Print( __FUNCTION__," "+TimeToString( TimeCurrent(), TIME_DATE|TIME_SECONDS )+": sparam = "+sparam+", ",(int)ChartGetInteger( 0, CHART_FIRST_VISIBLE_BAR ));
break;
}
}