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

Привет. Хочу сделать что-то такое: struct S {

int f() {
return 1;
}
int b(int q = f()) {
return q;
}
};

Компилятор ругается, что при вызове f() нет объекта. Было бы логично this добавить. Но тож не пашет. А почему? Интуитивно я не наговнокодил. Можно ли как-то такое сделать?

22 ответов

17 просмотров

Напиши static перед int f() и вызывай f как S::f()

Перегрузкой: int b() { b(f()); }

А в этом случае constexp не поможет?

Vanya-Khodor Автор вопроса
Anton Mershin
А в этом случае constexp не поможет?

Ну это упрощённый пример. В самом кейсе так нельзя.

Vanya-Khodor Автор вопроса
Alexander Karaev
Перегрузкой: int b() { b(f()); }

Круто. Спасибо. А почему не пашет?

Потому что при вызове этой функции нет объекта, с которым это могло бы вызваться

Зачем явно указывать S::f()

Никак

Vanya-Khodor Автор вопроса
Ilya Zviagin
Никак

А почему заюзать this тут невалидно? Почему нельзя сделать, чтобы это работало.

M
Зачем явно указывать S::f()

Он имел в виду для указания дефолта для параметра, там надо.

M
Аа понял

Не так код воспринял

Vanya Khodor
А почему заюзать this тут невалидно? Почему нельзя...

S s; int bb = s. b(42); s тут - this. А с чего параметр 42 должен относится к s? А может я хочу другой экземпляр S тут использовать?

Vanya-Khodor Автор вопроса
Ilya Zviagin
S s; int bb = s. b(42); s тут - this. А с чего...

Не должен. Что это ломает у меня, не понятно. Где вы хотите другой экземпляр S юзать, тоже не понял.

Ну точно можно на костылях, но там жёстко, но хочется же красиво...

порядок параметров не определен

Ок, давай так. У нас есть функция-член класса A. Она имеет четыре параметра. Первый - ссылка на объект класса B. Второй - ссылка на объект класса C. Третий - ссылка на объект класса D. четвёртый - ссылка на объект класса E. Каждый параметр имеет значение по умолчанию, которое вычисляется фунцией-членом классов. Так вот, расскажи, какого класса это должны быть функции по твоей логике ?

Vanya-Khodor Автор вопроса
Ilya Zviagin
Ок, давай так. У нас есть функция-член класса A. ...

Не понимаю, зачем вы продолжаете. Вроде уже всё решили)

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

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

а через 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
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
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
Карта сайта