struct STRUCT
{
//private:int i;
};
// Нужен только для того, чтобы показать необходимость решения без конструктора
union UNION
{
STRUCT Struct; // конструктора не должно бытьint i;
};
// Обходим Warning "possible use of uninitialized variable"template <typename T>
void StructInit( T& ) {}
STRUCT Func()
{
STRUCT Res = {0}; // ок!// StructInit(Res); // с этой строкой Warning не появляется, но это какой-то абсурд!return(Res);
}
voidOnStart()
{
Func();
}
構造体にデフォルトコンストラクタを追加する。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
バグ、バグ、質問
fxsaber さん 2017.09.06 09:38
不注意な私:)なぜこれが必要なのか、説明していただけますか?なぜコンストラクタが使えないのですか?
それとも、閉じたフィールドで構造体を初期化した場合のエラーを表示するためでしょうか?
不注意な私:)なぜこれが必要なのか、説明していただけますか?なぜコンストラクタが使えないのですか?
というのも、自分でコードを書いているときに、自分の構造体がユニオンに関与している場面に出くわしたからです。空のコンストラクタを使った解決策はすぐに思い浮かびましたが、私のコードにはユニオンがあるのが玉に瑕でした。だから、私を退屈させるためではなく、実用のためにこの質問をしたのです。
この「バグ」を回避するために、このような工夫をしたのです(バグなのか、 そうでないのか?)
他の解決策はまだ見ていません。
実行し、問題を確認した。現在、ユニオンを使用できるのは、パブリックフィールドを持つ構造物のみとなっているよう です。そうすると、struct = {0}と書くことが可能になります。
ということはありません。
ということはありません。
また誤解していたのかもしれませんが、このコードは警告を出さずに動作します。
また誤解していたのかもしれませんが、このコードは警告を出さずに動作します。
そうです、パブリック構造体が初期化されるのです。しかし、組合は関係ない。
興味深いことに、非表示フィールドを持つ構造体を新しい構造体の公開フィールドにすると、すべてのフィールドが開かれていても、新しい構造体も初期化されません。
こんにちは、配列の 要素数を変数で指定して宣言 することは可能かどうか教えてください。そうでない場合は、どうすればよいのでしょうか。
こんにちは、配列の 要素数を変数で指定して宣言 することは可能かどうか教えてください。そうでない場合は、どうすればよいのでしょうか。
https://www.mql5.com/ru/docs/array/arrayresize
こんにちは、配列の 要素数を変数で指定して宣言 することは可能かどうか教えてください。そうでない場合は、どうすればよいのでしょうか。
ArrayResize()