C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Проблема компиляции проекта
Petr
Отправлено: 08.10.2005, 21:33


Не зарегистрирован







Я недавно стал осваивать программирование в С++Builder.
И встретился с такой проблемой.
При компилировании проекта в EXE- фаил он работает нормально,
но только у меня(т.е. на машине с установленной средой С++Builder)
А на других машинах при запуске программ выдается сообщение,
что не найден фаил vcl60.bpl . Я этот фаил на своей машине нашел он находиться
в папке c:\windows\system32. Как мне скомпилировать мою программу так, чтобы
она ничего больше не требовала. Ну т.е. чтобы был только один исполняемый
фаил?
Заранее благодарен!
BreakPointMAN
  Отправлено: 08.10.2005, 22:39


Станционный диспетчер

Группа: Участник
Сообщений: 86



одни и те же вопросы задаются с завидной периодичностью... Petr, ну загляни ты, в конце концов, в FAQ! 2-ой вопрос твой...

Отредактировано BreakPointMAN — 08/10/2005, 22:41
Grigoriy
Отправлено: 14.10.2005, 06:44


Мастер участка

Группа: Участник
Сообщений: 381



Здравствуйте.
Я новичок на этом форуме, Григорий.
Я хочу, чтобы при выполнении моей программы создавались новые компоненты, например TImage.
Количество экземпляров класса TImage должно зависеть от количества файлов "*.BMP".
Далее — компоненты должны создаваться во время работы программы.
Использование TListView не подходит.

Компилятор пишет -
[C++ Error] Unit1.cpp(24): E2459 VCL style classes must be constructed using operator new

Пробовал использовать оператор new.

CODE

TImage* ffd;
ffd=new(TImage);


Пишет
[C++ Error] Unit1.cpp(23): E2285 Could not find a match for 'TImage::TImage()'

Если ответ на мой вопрос уже есть в другой теме, то сообщите, где.
olegenty
Отправлено: 14.10.2005, 07:13


Ветеран

Группа: Модератор
Сообщений: 2412



в книгах по С++
QUOTE

[C++ Error] Unit1.cpp(23): E2285 Could not find a match for 'TImage::TImage()'

говорит о том, что не найден конструктор по умолчанию для класса TImage. Увидев такую ошибку, логично залезть в Help и поинтересоваться, а какие вообще есть конструкторы у TImage. И обнаружить, что правильно писать так:
CODE

TImage *ffd = new TImage(this); // единственный параметр конструктора — класс "владелец", отвечающий за очистку ресурсов при разрушении объектов.
Grigoriy
Отправлено: 14.10.2005, 08:59


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE

CODE

TImage *ffd = new TImage(this); // единственный параметр конструктора — класс "владелец", отвечающий за очистку ресурсов при разрушении объектов.


Сработало.

Удалось также сделать приведение типов.

CODE

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TImage* ffd = new TImage(this);
((TImage)(*ffd)).Parent=Form1;
((TImage)(*ffd)).Height=400;
((TImage)(*ffd)).Left=10;
((TImage)(*ffd)).Top=10;
((TImage)(*ffd)).Width=400;
((TImage)(*ffd)).Picture->LoadFromFile("D:\\888.bmp");
}


Я запускал программу и нажимал на Button1.
И действительно все операторы выполнялись.
И загружалось изображение и показывалось.
Все. Спасибо.
Gedeon
Отправлено: 14.10.2005, 09:28


Ветеран

Группа: Модератор
Сообщений: 1742



Да уж, а через указатель работать идейно не хотим?

ffd->Parent=Form1;

и т.д.
avc*
Отправлено: 14.10.2005, 09:30


Не зарегистрирован







QUOTE (Grigoriy @ 14/10/2005, 06:44)

Я новичок на этом форуме, Григорий.

И не только на форуме, но, судя по вопросу и тексту, и в программировании на C.
Grigoriy
Отправлено: 14.10.2005, 10:05


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (Gedeon @ 14/10/2005, 09:28)
Да уж, а через указатель работать идейно не хотим?

ffd->Parent=Form1;

и т.д.

Да, пробовали, конечно.
Вот именно, что через указатель с самого начала и пытался вызвать тот метод.
Но неполучилось потому, что указатель описал не в той подпрограмме, в которой пытался использовать потом.
И что удивительно — еще думал, что что-то странно получается работать с указателем. Начал было уже всякими методами обходится.

А потом, когда понял, что указатель за пределами видимости находится и описал его в другой подпрограмме, так уже и забыл, что :
(может все таки попробовать прописать ffd->Parent=Form1 ?).

Спасибо, что напомнили.

Да, на C++ надо привыкнуть. Я только недавно купил книгу Герберта Шилдта по C++. По Builder-у не увидел в магазине.
До этого програмки составлял на Delphi.
А до того на Assembler.
А до того на Borland Pascal 7.0.
А до того на Turbo Pascal 5.5.
Grigoriy
Отправлено: 15.10.2005, 10:57


Мастер участка

Группа: Участник
Сообщений: 381



Подскажите, как использовать опции на закладке Packages, чтобы "*.exe" — файл получился наименьшего размера.
Дело в том, что компилятор может добавлять излишний код в результатирующий файл, а я хочу этого избежать.
Есть группа Design Packages. Но когда я отключаю независимые переключатели в списке, то исчезает окно формы и опустошается окно инспектора объектов.
Если я убираю птички только для того, чтобы эти пакеты не включались в исполняемый файл, то причем тут изменения в интерфейсе среды разработки.
Grigoriy
Отправлено: 15.10.2005, 14:54


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (Petr @ 08/10/2005, 21:33)

что не найден фаил vcl60.bpl . Я этот фаил на своей машине нашел он находиться
в папке c:\windows\system32. Как мне скомпилировать мою программу так, чтобы
она ничего больше не требовала.

Ну я так и не понял, зачем компилятор помещает излишний код в исполняемый файл.
Ну если я не использую методов в стандартных пакетах и не создаю экземпляры например из пакета Borland ADO DB Components, то зачем компилятор помещает машинный код, который содержит все методы всех классов пакета Borland ADO DB Components ?
То же самое и с остальными пакетами.
А если бы ещё больше было Packages, то "*.exe" был бы еще больше только потому, что ненужные пакеты используются в компиляции ?

Вернуться в Вопросы программирования в C++Builder