|
|
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
хочу загрузить в комбобокс список полей таблицы. причем хочу, чтоб отображались не сами названия полей а их лэйблы. хотел сделать так: Код: plaintext 1. компилю в билдере6. в итоге получаю: Cannot cast from 'const AnsiString' to 'TObject *' подскажите плиз как вывернуться из этой ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 11:03 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
сорри, сижу не в builder'е, посему вопрос: а какие аргументы требует ф-ция addobject? + может стоит вывести в label->text названия полчаемых типов - и сравнить с требуемыми аргументами указ. ф-ции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 11:06 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
AddObject(const AnsiString, TObject *) а Data->ADOQuery1->Fields->Fields ->FieldName - это AnsiString ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 11:22 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
imho, трабл в том, что пытаешься привести объект ansistring к указателю на объект. заранее оговорюсь, что вполне могу ошибаться. сё человек и т.д.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 11:35 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
авторimho, трабл в том, что пытаешься привести объект ansistring к указателю на объект. заранее оговорюсь, что вполне могу ошибаться. сё человек и т.д.... да все верно. это я знаю. просто не совсем точно сформулировал вопрос. как мне привести тип данных AnsiString к типу TObject * ?! например int приводится запросто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 11:38 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
may be, проканает так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 11:42 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
нет ( авторAnsiString tmp = Data->ADOQuery1->Fields->Fields ->FieldName; TObject * ptrObj = &tmp; тоже не работает. с той же ошибкой. Cannot convert 'AnsiString *' to 'TObject *' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 13:10 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
положим, не та же: Cannot cast from 'const AnsiString' to 'TObject *' и Cannot convert 'AnsiString *' to 'TObject *' теперь может попробовать так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 13:19 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
теперь ошибка такая: [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' первые две ошибки относятся к первой строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 13:56 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
это означает, что ansistring нельзя объявить подобным образом. либо отсутствует конструктор по умолчанию, либо он запрещен. надо глянуть по f1 для ansistring. остальные ошибки - лишь следствие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 14:25 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
и это, надеюсь ты заметил мою очепятку: не ansistring tmp * ... a ansistring * tmp, естественно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 14:26 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
чесно попробовав на всякий случай ansistring tmp * я конечно попробовал и ansistring * tmp, но результат был Cannot cast from 'AnsiString *' to 'TObject *' для строки TObject * ptrObj = static_cast<TObject *>(tmp); щас я уже думаю, использовать конструкцию типа Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 14:52 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
гмм, скажу счаз то, с чего стоило начать: глянуть help по addobject(...) -для чего и как она юзается. может, там найдется пример ее использования. есть еще вариант 100%, imho: объявить Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 15:17 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
AnsiString наследуется от TObject? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 15:46 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
видимо нет, иначе бы (TObject *) ansistring var прокатывал при отсутствии явного запрета на подобное приведение (а с чего бы ему быть?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 15:49 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
автормм, скажу счаз то, с чего стоило начать: глянуть help по addobject(...) -для чего и как она юзается. может, там найдется пример ее использования. я использовал метод комбобокса addobject для сохранения в нем структуры: значение какого-то поля из БД и соответсвующего ему кода. код - это всегдя int. и с преобразованием этого типа данных проблем не было. а сейчас хотел вместа int сохранить в этой структуре AnsiString. поскольку такой вариант не получался, я решил вместо имени поля хранить его номер. но потом понял, что он будет совпадать с ItemIndex. поэтому я и решил отказаться вообще от addobject воспользовавшись просто add(""). а что за класс TItem? это какой-то стандартный класс? а то билдер говорит undefined symbol 'TItem' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 16:02 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
если в combobox'е есть список Items он должен состоять из каких-то объектов, к-рые по аналогии могли бы называться TItem - стандартное решение для подобных контролов. тот факт, что TItem компилятор не воспринимает означает лишь, что это объект именуется как-то иначе. TcbItem, for example. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 16:07 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
У меня к сожалению нет билдера, но я как-то плохо себе представляю, чтобы метод AddObject(const AnsiString, TObject *) мог принимать в качестве второго параметра что-то кроме указателя на экземпляр TObject или отнаследованного от него класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 17:28 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
верно; у меня тоже нет давно билдера, поэтому я не смог вспомнить, что ansistring не является наследником tobject. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 17:48 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
FDDУ меня к сожалению нет билдера, но я как-то плохо себе представляю, чтобы метод AddObject(const AnsiString, TObject *) мог принимать в качестве второго параметра что-то кроме указателя на экземпляр TObject или отнаследованного от него класса. Да запросто он принимает, я писал когда-то примерно так: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 21:42 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
авторAnsiString *tmp = new AnsiString(); tmp = &Data->ADOQuery1->Fields->Fields->FieldName; TObject * ptrObj = (TObject *)tmp; компилятор в ответ на это говорит: Must take address of a memory location если немного изменить Код: plaintext 1. то работает. только я не пойму самой логики... как я понимаю: Код: plaintext 1. 2. 3. 4. 5. 6. т.е. получается что в комбобоксе будут храниться не строки, а указатели на строки? а как сделать обратное преобразование? т.е. получить из комбобокса строку? в ответ на ShowMessage((AnsiString)(ComboBox1->Items->Objects[ComboBox1->ItemIndex])); получаю Could not find a match for 'AnsiString::AnsiString(TObject *)' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 09:56 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
т.е. получается что в комбобоксе будут храниться не строки, а указатели на строки? если синтасксис ф-ции предусматривает передачу в качестве параметра указателя, то ничего с этим не поделаешь; да и делать не надо =) ведь никто не грит, что в combobox'е будут отображаться значение указателей, а не объектов, на к-рые они ссылаются =)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 11:27 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
что касается ShowMessage((AnsiString)(ComboBox1->Items->Objects[ComboBox1->ItemIndex])); то почему не сделать: авторShowMessage(*(ComboBox1->Items->Objects[ComboBox1->ItemIndex]));?? =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 11:29 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
Да, действительно. Это меня .NET испортил. Сейчас попробовал в VC: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Это в C# такое не компилируется: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 12:05 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
а ты не типу приводишь, а указатели, imho. канать такое должно, просто отвественность за возможные unreal exceptions несешь ты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 12:13 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
Не знаю, не знаю. Зачем тогда 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*". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 12:41 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
=)) гмм, тогда даже не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 12:57 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
в ответ на ShowMessage(*(ComboBox1->Items->Objects[ComboBox1->ItemIndex])); получаю Cannot convert 'TObject' to 'AnsiString' сделал так: Код: plaintext 1. скомпилилось, но в итоге шоумессэдж показывает пустую строку... блин... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 13:06 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
посмотри, реально, f1 по object -> список ф-ций; may be, там есть toansistring какой-нибудь: просто посмотри, какая ф-ция из списка ваозвращает или копию, или указатель на переменную типа ansistring или ansistring *. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 13:13 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
Наверно автору вопроса надо податься в форум Delphi. Там лучше растолкуют, как с дельфийскими классами работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 13:38 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
та же самая петрушка и в .net forms applications: буквально каждый класс наследует ф-цию tostring(). так что, тут есть что-то общее =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 13:51 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
Может быть, я не совсем понимаю, что хочет автор топика... Чтобы вывести первую строчку комбобокса: ShowMessage(ComboBox1->Items->Strings[ComboBox1->ItemIndex]); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 15:02 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
ага. =) именно, как я понял, это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 15:09 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
) парни, вы прикалываетесь? изначально мне нужно было, чтобы в комбобоксе отображались названия полей, те которые я сам назвал. и чтобы при выборе одного из них, я мог бы получить реальное имя поля, такое как оно есть в бд. поэтому я и добавлял в комбобокс по 2 значения: Data->ADOQuery1->Fields->Fields -> DisplayName Data->ADOQuery1->Fields->Fields -> FieldName соответственно. а этим: AnsiString * ccc = (AnsiString *) ComboBox1->Items->Objects[ComboBox1->ItemIndex]; ShowMessage(*ccc); я пытался вытащить из боксакомбо именно то второе значение (FieldName) которое было многократно преообразовано ... ) впрочем ладно... я уже обошел эту ситуацию иначе... так что если тока из принципа добить эту тему... но тем не менее всем большое спасибо за содействие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 16:09 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
просто roman вроде и ответил на тот вопрос, к-рый мы столь долго мусолили: romanComboBox1->Items->Strings[ComboBox1->ItemIndex] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 16:32 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
нет roman ComboBox1->Items->Strings[ComboBox1->ItemIndex] это то, что мы видим в списке комбобокса. это тоже самое что и ComboBox->Text после выбора строки или ComboBox1->Items->Values[ComboBox1->ItemIndex] ... это то где у меян DisplayName, а мне нужно FieldName ... )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 16:44 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
imho, решение для этого datatable (ansistring fieldname, ) + ф-ция, вызываемая на событие combobox->ontextchange(), к-рая будет выцеплять нужный вариант и присваивать его, кому надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 17:23 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
Должно работать вот так: ShowMessage(*((AnsiString)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]))); А насчет от TObject всякие tostring -- то это сущей воды бред))) ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2005, 20:35 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
LelikkДолжно работать вот так: ShowMessage(*((AnsiString)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]))); Could not find a match for 'AnsiString::AnsiString(TObject *)' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 09:56 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
А насчет от TObject всякие tostring -- то это сущей воды бред для меня весьма грустно было узнать, что я брежу на пару с компилятором =(. вот до чего доводит длительный запой. однако, в vc++ .net таки есть ф-ция tostring(), даже для object. другой вопрос, что она возвращает. а возвращает она название класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 10:48 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
решил вопрос то? А то есть одна мысль дикая, щас как раз смотрю... = = = Смайлиги-смайлиги-многа-смайлигов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 11:14 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
кстати здорово ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 11:14 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
2grinya: в принципе я решил свою задачу. другое дело, что не так как хотел сначала... т.е. я загружаю в комбобокс названия полей, и по идее еще можно тудаже записать номера полей. они - типа int и их можно легко привести к типу object. но поскольку эти номера идут подряд, то они будут совпадать с ItemIndex. нужно тока запртетить в гриде, отображающем эту таблицу, пользователю менять колонки местами, чтобы номера не поменялись... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 11:26 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
Ну тогда тебе в догон на додумывание. Пока не понял точно, но вроде действительно TObject не приводится к AnsiString. А к массиву char() вроде бы приводится. Т.е. вариант ComboBox1->Items->AddObject(AnsiString("Тест1test1"), (TObject *) ("первый")); ShowMessage((char *)(ComboBox1->Items->Objects[ComboBox1->ItemIndex])); //выводит "первый" работает. Для универсальности меняю ("первый") на (AnsiString("первый")).c_str() - все ОК. То, что надо было? = = = Смайлиги-смайлиги-многа-смайлигов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 11:37 |
|
||
|
приведение типов...
|
|||
|---|---|---|---|
|
#18+
13th_apostle А насчет от TObject всякие tostring -- то это сущей воды бред для меня весьма грустно было узнать, что я брежу на пару с компилятором =(. вот до чего доводит длительный запой. однако, в vc++ .net таки есть ф-ция tostring(), даже для object. другой вопрос, что она возвращает. а возвращает она название класса. Про VC++.NET другое дело, это-то Builder ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 11:53 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2033815]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
101ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 452ms |

| 0 / 0 |
