Евгений |
Отправлено: 06.07.2004, 23:16 |
|
Не зарегистрирован
|
Код:
TStrings *TStr;
TStr->Add("1"); //вот здесь сразу же вылетает ошибка типа "ACCESS VIOLATION IN ADRESS ... IN MODULE ..."
В чём ошибка ? |
|
Vlad |
Отправлено: 07.07.2004, 07:46 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
TStrings *TStr= new TStringList();
вот и все!
|
|
Admin |
Отправлено: 07.07.2004, 08:36 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
То-есть, теоретически:
во первых
Объекта класса TStrings создать нельзя,
можно создать объекты лишь от наследников этого класса,
каковым, например, и является TStringList
во вторых,
в своем примере TStrings *TStr вы создаете лишь указатель
на объект, сам объект создается и для него выделяется нужная
память, как и написал Vlad, с помощью оператора new
в третьих
на будующее — в среде С++Builder нажмите F1 на интресующей
строке, у нас это — TStrings и сразу получите help, в котором и
есть описание:
CODE |
void __fastcall TForm1::ButtonClick1(TObject *Sender)
{
TStringList *TempList = new TStringList; // declare the list
try{
//use the string list
}
__finally{
delete TempList; // destroy the list object
}
}
|
в четвертых — в примере это есть — не забывайте удалять
объекты, если они вам больше не нужны — delete
|
|
Vlad |
Отправлено: 08.07.2004, 07:47 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Хотелось бы добавить: часто TStringList не нужен а реализовать можно и так
//*******************
String MakeCommand(String numCom)
{
String Command="";
TStrings *list = new TStringList();
list->LoadFromFile( (ExtractFilePath(Application->ExeName)+"commands\\"+numCom+".sql"));
for(int i=0;iCount;i++)
Command+=list->Strings[i];
delete list;
return Command;
}
//// Здесь все работает и без TStringList |
|
AVC |
Отправлено: 08.07.2004, 07:55 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Еще бы не работало. Вы же сами написали
QUOTE |
TStrings *list = new TStringList();
|
Не заблуждайтесь. Это вам только кажется, что вы работаете с TSrings. На самом деле вы работаете с TStringList приведенным к TSrings.
Не верите — поробуйте так TStrings *list = new TStrings();
|
|
Евгений |
Отправлено: 08.07.2004, 07:56 |
|
Не зарегистрирован
|
Большое спасибо! Без вашей помощи не разобрался бы. Спасибо! |
|
Vlad |
Отправлено: 08.07.2004, 08:03 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
>>На самом деле вы работаете с TStringList приведенным к TSrings
логично, абсолютно согласен! хотя большего и не нужно.....
|
|