【发布时间】:2015-09-03 13:22:49
【问题描述】:
我有一段代码,它使用经典的 BCC 编译器在 C++ Builder XE8 中编译。但是,在使用 Clang 编译器的 Rad Studio 10 Seattle 中,我得到了错误
'no matching constructor found for initialization of TChoiceItem'
这是导致错误的代码的 sn-p。
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:
我发现this question 似乎描述了一个类似的问题。是不是我在编译代码时需要包含某种编译器标志?如果是这样,我可以在 embarcadero 项目编译器设置中以某种方式添加标志吗?
【问题讨论】:
-
TChoiceItem有哪些构造函数? -
我在原始问题中包含了
TChoiceItem的定义。从定义上看,我根本看不到任何构造函数。 -
TChoiceBase的构造函数呢? -
TChoiceBase也没有构造函数。
标签: clang c++builder c++builder-xe8 c++builder-10-seattle