![]() |
![]() | #1 |
The Reloaded Join Date: 01 2002 Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4 Uploads: 0
Reputation: 146 | 4 | ![]()
люди, неужели bcb так плох, что не дает писать в правильном стиле? во-первых, при работе с его визуальными средствами разработки все формы создаются как глобальные объекты. и устроить агрегацию одной формы в другую не получается (речь не идет о вызове одной формы из другой, а чтобы в классе, определяющем одну форму, был член-форма второго класса). поправьте, если я не прав. ну ладно, этого можно избежать, если отказаться от его визуальных средств (ну и на фига тогда было создавать rad-tool?!?). пишем всухую, с нуля. форма должна иметь какие-то агрегированные компоненты, как хотелось с самого начала. имеем: а) vcl объекты создаются только динамически и б) одновременно от них можно наследоваться, причем унаследованный класс автоматически приобретает такое же свойство. такое, по-моему, не реализуешь в рамках обычного c++. ну да ладно, дело даже не в этом. но чтобы компилятор не мог разрешить 'неоднозначность' между опережающим объявлением класса и его определением?!? .h file: Code: class TComponent; class A: TForm { A(TComponent* owner); }; Code: #include "vcl/file_for_TComponent_class" A::A(TComponent* owner) // error is here!!! {} |
![]() |
![]() | #2 |
Дошкольник Join Date: 10 2001 Location: Armenia
Posts: 61
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Esli xoroshenko posmotret' to pered callom funcii iz VCL stoit __fastcall shto opredelyaet calling convention (kak pascal, cdecl .. ). I krome etogo Nuzhno vizvat'(kak ne stranno ![]() Voobshem zhelatel'no prochest' libo help, libo druguyu literaturu... (luchshe help....) v kance kancov vsyo budet viglydet' tak: v .h file e class A : public TForm { __fastcall A(TComponent *Owner); }; v .c file e __fastcall A::A(TComponent *Owner) : TForm(Owner) { } ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() | #3 | |
The Reloaded Join Date: 01 2002 Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4 Uploads: 0
Reputation: 146 | 4 | ![]() Quote:
| |
![]() |
![]() | #4 |
Академик Join Date: 09 2001 Location: inside myself
Posts: 5,369
Downloads: 0 Uploads: 0
Reputation: 18 | 5 | ![]()
>...но это совершенно никакой связи не имеет с обращу твое внимание на основную часть, которую ты, по-видимому, все-таки не заметил в ответе Gev -a: __fastcall A::A(TComponent *Owner) : TForm(Owner) Т.е. конструктор наследника обязан обеспечивать инициализацию предка. ![]() Страуструп, Дейтел, Шилдт, etc.. |
![]() |
![]() | #5 | ||
The Reloaded Join Date: 01 2002 Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4 Uploads: 0
Reputation: 146 | 4 | ![]() Quote:
имеем forward-declaration класса TComponent (пусть все остальное написано корректно) в заголовке. включаем этот заголовок в файл, куда также включено определение TComponent. компилятор находит неоднозначность между definition и forward-declaration. а еще - fully ansi compliant! Quote:
![]() | ||
![]() |
![]() | #6 |
The Reloaded Join Date: 01 2002 Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4 Uploads: 0
Reputation: 146 | 4 | ![]()
хотя возможен еще один вариант - эти компоненты находятся в отдельном пространстве имен. проверю вечером, но если кто знает об этом - дайте сразу ответ плиз, а то... заплачу ![]() |
![]() |
![]() | #7 | |
The Reloaded Join Date: 01 2002 Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4 Uploads: 0
Reputation: 146 | 4 | ![]() Quote:
![]() однако странно было получить на некоторых классах (TEditCut, TEditCopy, TEditPaste) сообщение Not an allowed type. help говорит: Your source file declared some sort of forbidden type; for example, a function returning a function or array. сообщение возникает в такой ситуации: Code: namespace Stdactns {class TEditCut;} class A { TEditCut* x; }; Code: #include <StdActns.hpp> class A { TEditCut* x; }; | |
![]() |
![]() | #8 |
Дошкольник Join Date: 10 2001 Location: Armenia
Posts: 61
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Aram izveni ya ne ponyal vopros... Esli mozhno obyasni detal'nei... Ya rabotayu dolgoe vreme na Buildere i, chesno govorya, ni razu ne vstrechalsya s seryoznimi problemami. Ya takzhe poslednee vreme rabotayu s MFC, tozhe net problem, ososbennix ![]() ![]() Eto konchno delo vkusa ![]() Ya budu ochen' rad pomoch... I esho tut nuzhno bit' ochen' ostorozhnim s namespace -ami. Nu esli prosto napisat' class TComponent; class A ![]() { __fastcall A(TComponent *Owner); } to poyavitsya oshibka. Potomu chto TComponent opredelen v namespace e Classes. A shto kasetsya ostal'nix sluchaev ya prosto ne ponyal vopros. Obyasni detal'nei pls. Budu rad pomoch ![]() ![]() |
![]() |
![]() | #9 |
The Reloaded Join Date: 01 2002 Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4 Uploads: 0
Reputation: 146 | 4 | ![]()
опять опечатка, должно быть: Code: namespace Stdactns {class TEditCut;} class A { Stdactns::TEditCut* x; }; |
![]() |
![]() | #10 | ||
The Reloaded Join Date: 01 2002 Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4 Uploads: 0
Reputation: 146 | 4 | ![]() Quote:
Quote:
сейчас единственный вопрос - почему выдает такое сообщение на классах TEditCut и некоторых других? | ||
![]() |
![]() | #11 |
The Reloaded Join Date: 01 2002 Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4 Uploads: 0
Reputation: 146 | 4 | ![]()
последние новости от борланда. как показали эксперименты, подсказанные моей великой интуицией (потому как из сообщений компилятора об этом никак невозможно было догадаться), все было из-за '__published' - заменив его на обычный public, я получил нужный (т. е. правильный) результат. заменив обратно, снова пришел к ошибке. так что будем работать без object inspector-а. спасибо компании борланд за наше счастливое детство! кстати, и результаты компиляции по ходу как-то неожиданно менялись, я так и не понял, как он решает, учитывать происшедшие в исходниках изменения или нет. |
![]() |
Sponsored Links |