【问题标题】:C++Builder - cannot cast from 'AnsiString' to 'TObject'C++Builder - 不能从“AnsiString”转换为“TObject”
【发布时间】:2018-07-03 07:38:16
【问题描述】:

我在将字符串变量转换为TObject 时遇到问题。

我有一个向我返回两列的查询。在第一列中,我将 varchar 值转换为字符串,在第二列中,我将 int 值。

我想用这些值以这种方式填充 ComboBox:

cbx1-> AddItem (DataSet1->DataSet->Fields->Field[0]->AsString, (TObject *) (int) DataSet1->DataSet->Fields->Field[1];

当我提到第二个值是 int 类型时,我收到了一些灌木,例如 xD 等。

通过尝试将此值转换为字符串,例如:

String temp = IntToStr (DataSet1->DataSet->Fields->Field[1]);
cbx1-> AddItem (DataSet1->DataSet->Fields->Field[0]->AsString, (TObject *) temp;

我收到一条错误消息:

无法从“AnsiString”转换为“TObject”

我不知道我还能做些什么来转换这个值。

【问题讨论】:

    标签: type-conversion c++builder c++builder-6 tdataset tcombobox


    【解决方案1】:

    您不能将 AnsiString 值 强制转换为 TObject* 指针。您只能将整数值或指针值强制转换为 TObject* 指针。 AnsiString 两者都不是。

    无论如何,您都没有从第二个字段正确检索int 值。 Field[1] 是指向 Fields 集合中的实际 TField 对象的指针。该指针是您试图存储在 ComboBox 中的内容,不是 int 值 TField 所代表的。

    需要调用Fields[1]->AsInteger获取第二个字段的int值,类似于使用Fields[0]->AsString获取第一个字段的字符串值:

    cbx1->AddItem(
        DataSet1->DataSet->Fields->Field[0]->AsString,
        (TObject*) DataSet1->DataSet->Fields->Field[1]->AsInteger
        // in C++, using reinterpret_cast is preferred over C-style casting:
        // reinterpret_cast<TObject*>(DataSet1->DataSet->Fields->Field[1]->AsInteger)
    );
    

    这与您的previous question 中的代码没有什么不同:

    cbx1->AddItem("one",(TObject*)1);
    

    您现在只需将文字 "one" 和 1 与等效类型的运行时变量放在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多