|
|
|
приведение типов...
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2033815]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
| others: | 196ms |
| total: | 401ms |

| 0 / 0 |
