3

従来の BCC コンパイラを使用して C++ Builder XE8 でコンパイルされるコードのスニペットがあります。ただし、Clang コンパイラを使用する Rad Studio 10 シアトルでは、エラーが発生します。

'no matching constructor found for initialization of TChoiceItem'

エラーの原因となるコードのスニペットを次に示します。

LISTITEM_BEGIN( sch_TYPE_Choice )
    LISTITEM_DATA( sch_TYPE_Daily,      "Daily" )
    LISTITEM_DATA( sch_TYPE_Weekly,     "Weekly" )
    LISTITEM_DATA( sch_TYPE_Monthly,    "Monthly" )
LISTITEM_END()

ここに定義するコードがありますTChoiceItem

//------------------------------------------------------------------------------
#define LISTITEM_BEGIN( Name ) TChoiceItem Name[] = {
//------------------------------------------------------------------------------
#define INT_LISTITEM_BEGIN( Name ) TIntChoiceItem Name[] = {
//------------------------------------------------------------------------------
#define LISTITEM_DATA( XCode, XText ) { XCode, 0, (char*)XText, 0 },
#define LISTITEM_DATA_NC( XShortText, XText ) { 0, (char*)XShortText, (char*)XText, 0 },
#define LISTITEM_DATA_EX( XCode, XShortText, XText ) { XCode, (char*)XShortText, (char*)XText, 0 },
#define LISTITEM_DATA_EX2( XCode, XShortText, XText, XDesc ) { XCode, (char*)XShortText, (char*)XText, (char*)XDesc },
#define LISTITEM_END() LISTITEM_DATA(0,0) };

私はC++にかなり慣れていないので、クラス/メソッドを定義する上記のメソッドを何と呼ぶべきか正確にはわかりません。

これは、Clang コンパイラでサポートされていない、ある種の時代遅れの言語機能ですか? コンパイラが受け入れるようにコードまたは定義を変更する方法はありますか?

編集:

TChoiceItemクラス の実際の宣言を見つけました。

class TChoiceItem : public TChoiceBase
{
    public:
        char  Code;
        char *ShortText;
        char *Text;
        char *Desc;
};

標準コンストラクターはまったくないようです。しかし、どういうわけか、すべてが依然としてコンパイルされ、従来の BCC コンパイラで動作します。

編集2:

同様の問題を説明しているように見えるこの質問を見つけました。コードをコンパイルするときに、ある種のコンパイラ フラグを含める必要があるのでしょうか? もしそうなら、embarcadero プロジェクトのコンパイラ設定にフラグを追加できますか?

4

1 に答える 1