169 похожих чатов

А есть ли способ заставить конечный класс в иерархии классов

реализовать все, всё ещё не реализованные абстрактные методы?
самый простой пример:
program Project1;
{$mode delphi}
type
TMyClass = class abstract
procedure test; virtual; abstract;
end;
TMyClass2 = class(TMyClass);

var
O: TMyClass2;
begin
end.

Вот, чтобы тут компилятор ругался ошибкой что не реализован метод test
?

58 ответов

63 просмотра

на такое ругаться нельзя, в O может быть в итоге наследник TMyClass. вот на TMyClass.Create должна быть ругань

ругань есть на создании. на объявлении класса как Борис сказал ругаться не очень, вдруг наследники таки метод реализуют? [dcc32 Warning] Unit11.pas(38): W1020 Constructing instance of 'TMyClass2' containing abstract method 'TMyClass.test'

notme- Автор вопроса
Boris Usievich
на такое ругаться нельзя, в O может быть в итоге н...

program Project1; {$mode delphi} type TMyClass = class abstract procedure test; virtual; abstract; end; TMyClass2 = class sealed(TMyClass); var O: TMyClass2; begin O:=TMyClass2.Create; end. Ок ) уточним пример - вот тут хочу чтобы компилятор сказал мне плохие слова 😄

notme- Автор вопроса
notme
program Project1; {$mode delphi} type TMyClass =...

sealed - наследников уже не будет

notme- Автор вопроса
notme
program Project1; {$mode delphi} type TMyClass =...

Ууу, кстати... Delphi ещё как матюкается... а FPC молчит надо бы зарепортить! Ну всё, вопрос снят - это возможно, но пока-что в FPC проглядели

notme- Автор вопроса
notme
program Project1; {$mode delphi} type TMyClass =...

такой типа интерфейс, но без интерфейса... в интерфейсе мне не подходит что его хрен заинлайнишь

Как раз создаст еще нереализованные абстрактные методы

notme- Автор вопроса
Renat Suleymanov
screenshot Как раз создаст еще нереализованные абстрактные ме...

нее, это человеческий фактор, надо исключать такое, если возможно

notme
Ууу, кстати... Delphi ещё как матюкается... а FPC ...

Нет, Lazarus тоже репортит. Но только в случае, если в коде где-то есть вызов абстрактного метода

notme- Автор вопроса
Renat Suleymanov
Нет, Lazarus тоже репортит. Но только в случае, ес...

Репортит, возможно, но он компилирует успешно программу Мне нужно чтобы он останавливал компиляцию по ошибке

notme
Репортит, возможно, но он компилирует успешно прог...

Это сообщение уровня хинта. Зачем прерывать компиляцию, не понятно

notme- Автор вопроса
Renat Suleymanov
Это сообщение уровня хинта. Зачем прерывать компил...

потому-что программа не функциональна без реализации всех методов UB по паскалевски )

notme
потому-что программа не функциональна без реализац...

Тогда может интерфейс заюзать, там точно не получится скомпилировать без реализации. Раз уж так строго нужно

notme
потому-что программа не функциональна без реализац...

если метод не вызывать то справится :) но лучше так не делать

notme- Автор вопроса
Renat Suleymanov
Тогда может интерфейс заюзать, там точно не получи...

интерфейс - если сам интерфейс не юзать - это лишние куски кода, причём там где я принимаю этот класс - я использую именно класс, а не интерфейс, поэтому как мне проверить во время компиляции, что все нужные методы класса реализованы?

notme- Автор вопроса
Handatros
если метод не вызывать то справится :) но лучше та...

ну так я ж не просто так хочу задать строгость того, что необходимо реализовать...

notme
интерфейс - если сам интерфейс не юзать - это лишн...

Ну, хинт то будет. Нужно приучаться обращать внимание и убирать все предупреждения компилятора

notme- Автор вопроса
Renat Suleymanov
Ну, хинт то будет. Нужно приучаться обращать внима...

признайся просто, что ты у себя в программе где-то заложился на такое поведение FPC 😁 и теперь меня отговариваешь от репортинга 😁

notme
признайся просто, что ты у себя в программе где-то...

А что в Дельфи реально это не компилится? Может я что-то не понимаю. Мне кажется это как-то жестко )

notme- Автор вопроса
Renat Suleymanov
А что в Дельфи реально это не компилится? Может я ...

ну вот: https://t.me/Delphi_Lazarus/333871 реально а мне кажется - разумное поведение

notme- Автор вопроса
Handatros
warning в делфе

блин, ну вот же ЕГГОГ, даже два

notme
блин, ну вот же ЕГГОГ, даже два

с sealed? а, ну может быть. я про обычный класс

notme- Автор вопроса
Renat Suleymanov
Ну, хинт то будет. Нужно приучаться обращать внима...

проблема в том что фпц изрыгает хинты, даж бредовые тоннами, что уже и не замечаешь. на уровне "неинициализированная переменная" для автоматических типов тип строки

Peter
проблема в том что фпц изрыгает хинты, даж бредовы...

Нужно научится просто работать с хинтами в Лазарус и никаких проблем не будет

Renat Suleymanov
Нужно научится просто работать с хинтами в Лазарус...

как именно? заваливать каждый модуль мусором для отключения? или в каждом проекте, где используется модуль, постоянно прописывать игнор?

ну вот и отлично - выложил на гитхаб модуль - юзер его подключил и увидел тонны мусора, и заодно подумал о масорности модуля, удобно

ну если я что-то для дельфей скачал и вижу тонны ворнингов при сборке - делаю выводы о качестве. в лазарусе же - сам лазарус тонны форнингов на сборке себя плодит, часть бредовые

Peter
ну если я что-то для дельфей скачал и вижу тонны в...

Начинаем из пустого порожнего. Я выше все объяснил. Если один клик скрыть для проекта ненужные для тебя хинты проблема, ну что ж...

Renat Suleymanov
Начинаем из пустого порожнего. Я выше все объяснил...

фишка в том что фпц рассказывает про проблемы, где их нет, отключаешь, а когда проблема была бы действительно найдена хинтом/ворнингом - то уже и не увидишь ее. теряется смысл этих штук.

Renat Suleymanov
Начинаем из пустого порожнего. Я выше все объяснил...

повторюсь - дело в модулях, которые могут шаряться между проектами и т.д. не хочу создавать warnings.txt и сверять что отключать, что нет. и в целом - сборка с тонной варнингов - плохой тон

Peter
повторюсь - дело в модулях, которые могут шаряться...

Нет, никаких тонн варнингов. У меня в проектах все чисто. Читать мое первое сообщение. Точка. Повторятся не хочется

notme- Автор вопроса
Renat Suleymanov
Нет, никаких тонн варнингов. У меня в проектах все...

надеюсь когда-то разработчики лазаруса возьмут твой метод на вооружение, чтобы пустой лкл проект не "сыпал" ворнингами при сборке, как и сам лазарус

notme- Автор вопроса
Peter
надеюсь когда-то разработчики лазаруса возьмут тво...

Лучше не надо Надо ввести метрику: кол-во хинтов, кол-во варнингов на каждую сборку, и после каждой сборки выводить только вновь возникшие

notme
Лучше не надо Надо ввести метрику: кол-во хинтов, ...

ну вот щас пустой лкл проект "выбрасывает" такое - это не нормально

notme- Автор вопроса
Peter
screenshot ну вот щас пустой лкл проект "выбрасывает" такое -...

Я не спорю, но имхо лучше не скрывать это совсем, а как-то более умно фильтровать Ну к примеру по-пакетно, по-модульно, по пути ФС, по признаку того новое ли это сообщение по отношение у прошлой компиляции Допустим! В первый раз компилятор выдал кучу Будем считать, что юзер ознакомился На второй раз, если там те же самые сообщения, то их мьютить и не выводить, ибо ничего не изменилось, а если есть новые - то выводить только их Ну и плюс кнопка - сбросить все признаки - после этого последующая компиляция снова выдаст на один раз всю кучу, а потом снова включится интеллектуальный фильтр

notme
Я не спорю, но имхо лучше не скрывать это совсем, ...

Например просто починить ворнинги, и удалить из дефолтной выдачи те, что сломаны

Peter
screenshot ну вот щас пустой лкл проект "выбрасывает" такое -...

Никогда варнинги адекватными не будут в fpc по одной простой причине. Разрабы компилятора сами ими не пользуются. В проекте компилятора все варнинги/хинты отключены.

Kirill Filippenok
Это точно?

Только надо иметь ввиду, это для для lpi компилятора. Думаю для компилятора это сделано осознанно. Во всех других проектах lpi в исходниках Lazarus и хинты ворнинги конечно же включены

notme- Автор вопроса
Renat Suleymanov
Только надо иметь ввиду, это для для lpi компилято...

Да, так и есть, я не помню где-то читал, в каком-то мануале на компилятор - и там писалось, что эти *.lpi - только лишь для каких-то вроде как тестовых вещей Может сами разрабы их и используют, но наверное у них варнинги включены

Jack128
screenshot

Мне там больше нижняя настройка нравится "Stop after number of errors: 50" - выглядит надежно 😂

Александр (Rouse_) Багель
Мне там больше нижняя настройка нравится "Stop aft...

По крайней мере это говорит о том что парсер/резолвер/итд умеют восстанавливаться после ошибки и дальше работать, что не плохо

Александр (Rouse_) Багель
Я тебя опечалю :)

Ну если я в исходнике два unresolved идентификатора напишу, про оба ошибку выдаст, а не помрет от первой ошибки

Peter
Ну если я в исходнике два unresolved идентификатор...

Там есть более хитрые ошибки, то что ты написал - это штатное. А вот хитрые умашаешся еще искать как правильно патчить чтобы остальное не сломалось.

Александр (Rouse_) Багель
Там есть более хитрые ошибки, то что ты написал - ...

Это понятно, что есть сложные случаи, когда все «взрывается»

Peter
Это понятно, что есть сложные случаи, когда все «в...

взрывается это еще мягко сказано, иногда он может потерять тот модуль который парсил и продолжить с совершенно другого (в транке это уже пофикшено)

notme
Да, так и есть, я не помню где-то читал, в каком-т...

+ там в проекте не видно режимов компиляции. Только default, в котором даже символы не стрипятся

Renat Suleymanov
+ там в проекте не видно режимов компиляции. Тольк...

а других build mode'ов в проекте и нет, это единственный. Честно говоря не разбирался, как там релиз компилятора собирается.

Jack128
а других build mode'ов в проекте и нет, это единст...

Так я о том и говорю. Впечатление, как будто они какие-то "дежурные": нет ни отладочного mode ни релизного. И как выше сказал @O_o_0_0_o_O это объясняется тем, что они для каких-то тестовых вещей. Так что то, что именно в этом проекте отключены хинты ничего не говорит. Повторюсь во всех других проектах в исходниках - все включено

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта