![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
есть код
строка // 1 нормально компилится на строку //2 ругается: error C2512: 'Functor' : no appropriate default constructor available понимаю, что прикол тут из легких, но не вижу. может, кто объяснит? |
|||
|
||||
| jorikdima |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 18.1.2008 Где: Там, где Зенит Репутация: нет Всего: нет |
удалил
Это сообщение отредактировал(а) jorikdima - 25.2.2008, 12:09 |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
создать временный объект типа Functorб передавая ему в качестве аргумента указатель на ф-ю ЗЫ. Кстати, ведь неважно, что я хочу сделать, вопрос же не "а почему оно не так работает"
должен? аргументируй |
|||
|
||||
| Fazil6 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
думаю, что дело в том, что компилятор не может такое выражение правильно разобрать (то, что ты имеешь в виду).
попробуй вот так
Добавлено через 2 минуты и 25 секунд
ведь вызов конструктора - это не создание объекта, а инициализация объекта |
||||
|
|||||
| Alek86 |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
помогло, спасибо
онлайн компилятор (других не имею) написал то же самое:
то есть эта "фича" согласована со Стандартом?
имхо, неверно
тут создается временный объект и сразу умирает |
||||||||
|
|||||||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
не перл, если имелось в виду невыделение памяти ведь new вызывает конструктор для уже выделенной памяти просто в стеке вместо new память выделяет среда выполнения Добавлено через 2 минуты и 51 секунду кстати вопрос еще в силе, хоть и чуток изменен это "Стандартное" поведение компилятора? |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
для меня "создание объекта" делится на "выделение памяти" и "инициализацию"
читай внимательней или это третий перл? тогда уж потрудись объяснить как На Самом Деле, когда из под стола вылезешь |
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Судя по всему да. Можно же делать int a( int (x) ); вот и тут похоже то же самое. Тем более что если внести прототип ф-ции в main() то ошибка уже
Это сообщение отредактировал(а) Mayk - 25.2.2008, 13:00 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
а при чем тут int a( int (x) ) ? наоборот, тут МОЖНО вызвать int(x) (создание временного объекта) в моем же случае вызвать не получается Добавлено через 1 минуту и 10 секунд кстати
спокойно сьедает и не давится |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
вот так компилятор тоже понимает что //2 ни разу не объявляет переменную под названием func Добавлено @ 13:05 Какой вызов? О чем ты? Нет там никакого вызова акромя неявного вызова конструктора по умолчания. Там определятся переменная func с типом Functor. И компилятор не может найти дефолтовый конструктор. О чем и сообщает. А у int(x) с конструированием по умолчанию проблем нет. В отличие от Functor'а. Это сообщение отредактировал(а) Mayk - 25.2.2008, 13:06 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
хм
если есть переменная func типа Func, разве не должен компилятор (используя поиск-не-помню-кого) найти конструктор, который принимает переменную типа Func и заюзать его? |
|||
|
||||
| Fazil6 |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
вообще стандарт - сборник перлов. Создание объекта - выделение памяти + вызов конструктора. пробуем выполнить вот такую программу и многое становится ясно
По сути вопроса смотрим стандарт пункт 6.8 Ambiguity resolution Functor(func); // 2 - это тоже самое что и Functor func ; |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |