powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / приведение типов...
46 сообщений из 46, показаны все 2 страниц
приведение типов...
    #32874013
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу загрузить в комбобокс список полей таблицы. причем хочу, чтоб отображались не сами названия полей а их лэйблы.
хотел сделать так:
Код: plaintext
1.
ComboBox1->Items->AddObject(Data->ADOQuery1->Fields->Fields[i]->DisplayName, (TObject *) (Data->ADOQuery1->Fields->Fields[i]->FieldName));

компилю в билдере6.
в итоге получаю:
Cannot cast from 'const AnsiString' to 'TObject *'

подскажите плиз как вывернуться из этой ситуации?
...
Рейтинг: 0 / 0
приведение типов...
    #32874029
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сорри, сижу не в builder'е, посему вопрос: а какие аргументы требует ф-ция addobject? + может стоит вывести в label->text названия полчаемых типов - и сравнить с требуемыми аргументами указ. ф-ции.
...
Рейтинг: 0 / 0
приведение типов...
    #32874094
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AddObject(const AnsiString, TObject *)
а
Data->ADOQuery1->Fields->Fields ->FieldName - это AnsiString
...
Рейтинг: 0 / 0
приведение типов...
    #32874136
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
imho, трабл в том, что пытаешься привести объект ansistring к указателю на объект. заранее оговорюсь, что вполне могу ошибаться. сё человек и т.д....
...
Рейтинг: 0 / 0
приведение типов...
    #32874149
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторimho, трабл в том, что пытаешься привести объект ansistring к указателю на объект. заранее оговорюсь, что вполне могу ошибаться. сё человек и т.д....

да все верно. это я знаю. просто не совсем точно сформулировал вопрос.
как мне привести тип данных AnsiString к типу TObject * ?!

например int приводится запросто.
...
Рейтинг: 0 / 0
приведение типов...
    #32874159
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
may be, проканает так:
Код: plaintext
1.
AnsiString tmp = Data->ADOQuery1->Fields->Fields[i]->FieldName;
TObject * ptrObj = &tmp;
далее по тексту
...
Рейтинг: 0 / 0
приведение типов...
    #32874508
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет (
авторAnsiString tmp = Data->ADOQuery1->Fields->Fields ->FieldName;
TObject * ptrObj = &tmp;

тоже не работает.
с той же ошибкой. Cannot convert 'AnsiString *' to 'TObject *'
...
Рейтинг: 0 / 0
приведение типов...
    #32874545
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
положим, не та же:
Cannot cast from 'const AnsiString' to 'TObject *'
и
Cannot convert 'AnsiString *' to 'TObject *'

теперь может попробовать так:
Код: plaintext
1.
2.
AnsiString tmp * =new AnsiString();
*tmp = Data->ADOQuery1->Fields->Fields->FieldName;
TObject * ptrObj = static_cast<TObject *>(tmp);
...
Рейтинг: 0 / 0
приведение типов...
    #32874714
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь ошибка такая:

[C++ Error] Unit3.cpp(41): E2108 Improper use of typedef 'AnsiString'
[C++ Error] Unit3.cpp(41): E2379 Statement missing ;
[C++ Error] Unit3.cpp(42): E2451 Undefined symbol 'tmp'

первые две ошибки относятся к первой строке.
...
Рейтинг: 0 / 0
приведение типов...
    #32874816
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это означает, что ansistring нельзя объявить подобным образом. либо отсутствует конструктор по умолчанию, либо он запрещен. надо глянуть по f1 для ansistring. остальные ошибки - лишь следствие.
...
Рейтинг: 0 / 0
приведение типов...
    #32874822
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и это, надеюсь ты заметил мою очепятку:
не ansistring tmp * ... a ansistring * tmp, естественно.
...
Рейтинг: 0 / 0
приведение типов...
    #32874930
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чесно попробовав на всякий случай
ansistring tmp *
я конечно попробовал и
ansistring * tmp, но результат был

Cannot cast from 'AnsiString *' to 'TObject *'
для строки TObject * ptrObj = static_cast<TObject *>(tmp);

щас я уже думаю, использовать конструкцию типа
Код: plaintext
Data->ADOQuery1->Fields->Fields[ComboBox1->ItemIndex]->FieldName
чтоы получить имя поля по его номеру ...
...
Рейтинг: 0 / 0
приведение типов...
    #32875016
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
гмм, скажу счаз то, с чего стоило начать: глянуть help по addobject(...) -для чего и как она юзается. может, там найдется пример ее использования. есть еще вариант 100%, imho: объявить
Код: plaintext
1.
2.
TItem * newIt = new TItem(look for help);
newIt->some text property = your string;
combobox->AddObject(..., (TObject *)(newIt));
...
Рейтинг: 0 / 0
приведение типов...
    #32875141
FDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FDD
Гость
AnsiString наследуется от TObject?
...
Рейтинг: 0 / 0
приведение типов...
    #32875155
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
видимо нет, иначе бы (TObject *) ansistring var прокатывал при отсутствии явного запрета на подобное приведение (а с чего бы ему быть?)
...
Рейтинг: 0 / 0
приведение типов...
    #32875211
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автормм, скажу счаз то, с чего стоило начать: глянуть help по addobject(...) -для чего и как она юзается. может, там найдется пример ее использования.

я использовал метод комбобокса addobject для сохранения в нем структуры: значение какого-то поля из БД и соответсвующего ему кода.
код - это всегдя int. и с преобразованием этого типа данных проблем не было. а сейчас хотел вместа int сохранить в этой структуре AnsiString.

поскольку такой вариант не получался, я решил вместо имени поля хранить его номер. но потом понял, что он будет совпадать с ItemIndex. поэтому я и решил отказаться вообще от addobject воспользовавшись просто add("").

а что за класс TItem?
это какой-то стандартный класс? а то билдер говорит undefined symbol 'TItem'
...
Рейтинг: 0 / 0
приведение типов...
    #32875226
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если в combobox'е есть список Items он должен состоять из каких-то объектов, к-рые по аналогии могли бы называться TItem - стандартное решение для подобных контролов. тот факт, что TItem компилятор не воспринимает означает лишь, что это объект именуется как-то иначе. TcbItem, for example.
...
Рейтинг: 0 / 0
приведение типов...
    #32875543
FDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FDD
Гость
У меня к сожалению нет билдера, но я как-то плохо себе представляю, чтобы метод AddObject(const AnsiString, TObject *) мог принимать в качестве второго параметра что-то кроме указателя на экземпляр TObject или отнаследованного от него класса.
...
Рейтинг: 0 / 0
приведение типов...
    #32875615
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
верно; у меня тоже нет давно билдера, поэтому я не смог вспомнить, что ansistring не является наследником tobject.
...
Рейтинг: 0 / 0
приведение типов...
    #32875888
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FDDУ меня к сожалению нет билдера, но я как-то плохо себе представляю, чтобы метод AddObject(const AnsiString, TObject *) мог принимать в качестве второго параметра что-то кроме указателя на экземпляр TObject или отнаследованного от него класса.

Да запросто он принимает, я писал когда-то примерно так:
Код: plaintext
1.
2.
3.
AnsiString *tmp  = new AnsiString();
tmp = &Data->ADOQuery1->Fields->Fields->FieldName;
TObject * ptrObj = (TObject *)tmp;
...
Рейтинг: 0 / 0
приведение типов...
    #32876278
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторAnsiString *tmp = new AnsiString();
tmp = &Data->ADOQuery1->Fields->Fields->FieldName;
TObject * ptrObj = (TObject *)tmp;
компилятор в ответ на это говорит:
Must take address of a memory location

если немного изменить
Код: plaintext
1.
AnsiString aaa =Data->ADOQuery1->Fields->Fields[i]->FieldName;
tmp = &aaa;

то работает. только я не пойму самой логики...
как я понимаю:
Код: plaintext
1.
2.
3.
4.
5.
6.
//указателю типа АнсиСтринг присваивается адрес строки
tmp = &Data->ADOQuery1->Fields->Fields->FieldName; 
// указатель приводится к типу TObject *
TObject * ptrObj = (TObject *)tmp;
// добовляем в комбобокс объект, который является указателем на строку.
ComboBox1->Items->AddObject(Data->ADOQuery1->Fields->Fields[i]->DisplayName, ptrObj);

т.е. получается что в комбобоксе будут храниться не строки, а указатели на строки?

а как сделать обратное преобразование? т.е. получить из комбобокса строку?
в ответ на
ShowMessage((AnsiString)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]));
получаю
Could not find a match for 'AnsiString::AnsiString(TObject *)'
...
Рейтинг: 0 / 0
приведение типов...
    #32876583
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. получается что в комбобоксе будут храниться не строки, а указатели на строки?
если синтасксис ф-ции предусматривает передачу в качестве параметра указателя, то ничего с этим не поделаешь; да и делать не надо =) ведь никто не грит, что в combobox'е будут отображаться значение указателей, а не объектов, на к-рые они ссылаются =))))
...
Рейтинг: 0 / 0
приведение типов...
    #32876591
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что касается
ShowMessage((AnsiString)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]));
то почему не сделать:
авторShowMessage(*(ComboBox1->Items->Objects[ComboBox1->ItemIndex]));?? =)
...
Рейтинг: 0 / 0
приведение типов...
    #32876762
FDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FDD
Гость
Да, действительно. Это меня .NET испортил. Сейчас попробовал в VC:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class AnsiString
{	
};
class TObject
{
};

	AnsiString *tmp  = new AnsiString();	
	TObject *ptrObj = (TObject *)tmp;
Компилируется.
Это в C# такое не компилируется:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
class AnsiString
{
};
class TObject
{
};
	AnsiString tmp  = new AnsiString();	
	TObject ptrObj = (TObject)tmp;
Только имхо в C# оно как-то правильнее. Не должны приводиться друг к другу неприводимые типы.
...
Рейтинг: 0 / 0
приведение типов...
    #32876800
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а ты не типу приводишь, а указатели, imho. канать такое должно, просто отвественность за возможные unreal exceptions несешь ты.
...
Рейтинг: 0 / 0
приведение типов...
    #32876915
FDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FDD
Гость
Не знаю, не знаю. Зачем тогда reinterpret_cast? MSDNThe reinterpret_cast operator can be used for conversions such as char* to int*, or One_class* to Unrelated_class*, which are inherently unsafe.В данном случае как раз "One_class* to Unrelated_class*".
...
Рейтинг: 0 / 0
приведение типов...
    #32876979
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
=)) гмм, тогда даже не знаю.
...
Рейтинг: 0 / 0
приведение типов...
    #32877026
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в ответ на
ShowMessage(*(ComboBox1->Items->Objects[ComboBox1->ItemIndex]));
получаю
Cannot convert 'TObject' to 'AnsiString'

сделал так:
Код: plaintext
1.
AnsiString * ccc = (AnsiString *) ComboBox1->Items->Objects[ComboBox1->ItemIndex];
ShowMessage(*ccc);
это правильно?
скомпилилось, но в итоге шоумессэдж показывает пустую строку...

блин...
...
Рейтинг: 0 / 0
приведение типов...
    #32877050
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
посмотри, реально, f1 по object -> список ф-ций; may be, там есть toansistring какой-нибудь: просто посмотри, какая ф-ция из списка ваозвращает или копию, или указатель на переменную типа ansistring или ansistring *.
...
Рейтинг: 0 / 0
приведение типов...
    #32877132
FDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FDD
Гость
Наверно автору вопроса надо податься в форум Delphi. Там лучше растолкуют, как с дельфийскими классами работать.
...
Рейтинг: 0 / 0
приведение типов...
    #32877185
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
та же самая петрушка и в .net forms applications: буквально каждый класс наследует ф-цию tostring(). так что, тут есть что-то общее =)
...
Рейтинг: 0 / 0
приведение типов...
    #32877448
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть, я не совсем понимаю, что хочет автор топика...

Чтобы вывести первую строчку комбобокса:
ShowMessage(ComboBox1->Items->Strings[ComboBox1->ItemIndex]);
...
Рейтинг: 0 / 0
приведение типов...
    #32877484
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага. =) именно, как я понял, это.
...
Рейтинг: 0 / 0
приведение типов...
    #32877669
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
) парни, вы прикалываетесь?

изначально мне нужно было, чтобы в комбобоксе отображались названия полей, те которые я сам назвал. и чтобы при выборе одного из них, я мог бы получить реальное имя поля, такое как оно есть в бд.

поэтому я и добавлял в комбобокс по 2 значения:
Data->ADOQuery1->Fields->Fields -> DisplayName
Data->ADOQuery1->Fields->Fields -> FieldName
соответственно.

а этим:
AnsiString * ccc = (AnsiString *) ComboBox1->Items->Objects[ComboBox1->ItemIndex];
ShowMessage(*ccc);

я пытался вытащить из боксакомбо именно то второе значение (FieldName) которое было многократно преообразовано ... )

впрочем ладно... я уже обошел эту ситуацию иначе... так что если тока из принципа добить эту тему...

но тем не менее всем большое спасибо за содействие!
...
Рейтинг: 0 / 0
приведение типов...
    #32877756
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
просто roman вроде и ответил на тот вопрос, к-рый мы столь долго мусолили:
romanComboBox1->Items->Strings[ComboBox1->ItemIndex]
...
Рейтинг: 0 / 0
приведение типов...
    #32877788
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет
roman
ComboBox1->Items->Strings[ComboBox1->ItemIndex]
это то, что мы видим в списке комбобокса.
это тоже самое что и
ComboBox->Text после выбора строки или ComboBox1->Items->Values[ComboBox1->ItemIndex] ...

это то где у меян DisplayName, а мне нужно FieldName ... ))
...
Рейтинг: 0 / 0
приведение типов...
    #32877892
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
imho, решение для этого datatable (ansistring fieldname, ) + ф-ция, вызываемая на событие combobox->ontextchange(), к-рая будет выцеплять нужный вариант и присваивать его, кому надо.
...
Рейтинг: 0 / 0
приведение типов...
    #32878160
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должно работать вот так:

ShowMessage(*((AnsiString)(ComboBox1->Items->Objects[ComboBox1->ItemIndex])));

А насчет от TObject всякие tostring -- то это сущей воды бред)))

________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
приведение типов...
    #32879282
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelikkДолжно работать вот так:

ShowMessage(*((AnsiString)(ComboBox1->Items->Objects[ComboBox1->ItemIndex])));

Could not find a match for 'AnsiString::AnsiString(TObject *)'
...
Рейтинг: 0 / 0
приведение типов...
    #32879427
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А насчет от TObject всякие tostring -- то это сущей воды бред для меня весьма грустно было узнать, что я брежу на пару с компилятором =(. вот до чего доводит длительный запой. однако, в vc++ .net таки есть ф-ция tostring(), даже для object. другой вопрос, что она возвращает. а возвращает она название класса.
...
Рейтинг: 0 / 0
приведение типов...
    #32879499
Фотография grinya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решил вопрос то? А то есть одна мысль дикая, щас как раз смотрю...

= = =
Смайлиги-смайлиги-многа-смайлигов
...
Рейтинг: 0 / 0
приведение типов...
    #32879502
Фотография grinya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати здорово
...
Рейтинг: 0 / 0
приведение типов...
    #32879532
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2grinya:
в принципе я решил свою задачу. другое дело, что не так как хотел сначала... т.е. я загружаю в комбобокс названия полей, и по идее еще можно тудаже записать номера полей. они - типа int и их можно легко привести к типу object. но поскольку эти номера идут подряд, то они будут совпадать с ItemIndex. нужно тока запртетить в гриде, отображающем эту таблицу, пользователю менять колонки местами, чтобы номера не поменялись...
...
Рейтинг: 0 / 0
приведение типов...
    #32879569
Фотография grinya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда тебе в догон на додумывание. Пока не понял точно, но вроде действительно TObject не приводится к AnsiString. А к массиву char() вроде бы приводится.
Т.е. вариант
ComboBox1->Items->AddObject(AnsiString("Тест1test1"), (TObject *) ("первый"));
ShowMessage((char *)(ComboBox1->Items->Objects[ComboBox1->ItemIndex])); //выводит "первый"
работает.
Для универсальности меняю ("первый") на (AnsiString("первый")).c_str() -
все ОК. То, что надо было?

= = =
Смайлиги-смайлиги-многа-смайлигов
...
Рейтинг: 0 / 0
приведение типов...
    #32879627
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13th_apostle А насчет от TObject всякие tostring -- то это сущей воды бред для меня весьма грустно было узнать, что я брежу на пару с компилятором =(. вот до чего доводит длительный запой. однако, в vc++ .net таки есть ф-ция tostring(), даже для object. другой вопрос, что она возвращает. а возвращает она название класса.

Про VC++.NET другое дело, это-то Builder
...
Рейтинг: 0 / 0
приведение типов...
    #32879693
Имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 grinya

ух ты блин, работает! даа... как то к char привести я не подумал.

спасибо!
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / приведение типов...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]