異なるコンパイラはあなたに別のエラーを与える:
struct S {
S* s = new S();
};
GCCの右バージョンで生成します。
prog.cpp:2:15: error: constructor required before non-static data member for 'S::s' has been parsed
S* s = new S();
^
http://ideone.com/8TU5Th
をあなたが実際にこの時点でnew
を呼び出していないにもかかわらず、コンパイラはを解析し、のnew
コールを解析する必要があります。デフォルトのctorを提供していないので、それを合成する必要がありますが、このメンバーはデフォルトのctorを参照するnew
を参照しているため、この処理はできません。 ctor。
また、あなたは別の答えにあなたのコメントで「私はBASEの任意のオブジェクトを作成しない」、しかしで、実際にあなたが行うことを言う:
static const BASE base_1;
static BASE base_2;
これらのステートメントの両方がするプログラムが必要になりますデフォルトでBASEのインスタンスを起動時に初期化し、BASEのインスタンスが最初に行うことは、BASEの動的インスタンスを割り当てて、そのコンストラクタを呼び出すことです...
um何ですか? 'BASE'を作成して' new'を介して別の 'BASE'を作成しないで、別の' BASE'ともう一つの 'BASE'を永遠に作成しますか?ここのユースケースは何ですか? – vu1p3n0x
コンパイラから得たエラーを提供できますか? – JVApen
合成されたメソッド 'constexpr BASE :: BASE()'が最初に必要です。 – QuantumEnergy