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

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

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

var
O: TMyClass2;
begin
end.

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

58 ответов

28 просмотров

на такое ругаться нельзя, в 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 это объясняется тем, что они для каких-то тестовых вещей. Так что то, что именно в этом проекте отключены хинты ничего не говорит. Повторюсь во всех других проектах в исходниках - все включено

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта