|
Комп_Оратор)
|
|||||||||||
Ошибка вызова конструктора преобразования с аргументом - переменной в области действия данной переменной22.03.2019, 11:43. Показов 4768. Ответов 93
Метки нет (Все метки)
Всем доброго времени суток.
Увидел на англоязычном сайте школярский вопросик, который может звучать так: "Вывести числа от 1 до 10 и их квадраты на экран". Было пару минут и я написал:
C:\...\ConsoleTest\main.cpp:2002: ошибка: redefinition of 'i' with a different type: 'Seq_squer_logger' vs 'int'При чём, если перетащить коммент снизу вверх, то создание именованного объекта компилятор парсит нормально. Если до цикла вызвать:
Почему компилятор не желает запускать конструктор для создания временного объекта в данном случае?
0
|
|||||||||||
| 22.03.2019, 11:43 | |
|
Ответы с готовыми решениями:
93
Области действия переменной a,b и c.Присвоить максимальное из них переменной a,минимальное-переменной c,среднее переменной b
|
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||||||||||||||||||||
| 22.03.2019, 12:31 | |||||||||||||||||||||
Добавлено через 3 минуты
У меня шланг выдал проблему о unnecessary parentheses in declaration of 'i' [-Wparentheses]Добавлено через 3 минуты parentheses, делают выражение как lvalue.Добавлено через 23 минуты prvalue?Даже если так, это ничего не меняет. Похоже все проще. Компилятор просто считал что здесь идет объявление переменной как
Но почему он так делал не ясно
1
|
|||||||||||||||||||||
|
Комп_Оратор)
|
|||
| 22.03.2019, 13:42 [ТС] | |||
|
Что же тут происходит? Подождём разъяснений от гуру. ![]() Добавлено через 9 минут ![]() Но непонятно всё едино.
0
|
|||
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
|||||||||||||||||||||||||||||||||
| 22.03.2019, 14:44 | |||||||||||||||||||||||||||||||||
Можно даже с инициализацией писать:
По аналогии в вашем случае:
Seq_squer_logger по имени iНо в зоне видимости уже есть объект с таким именем: int iО чем и пытается сообщить вам компилятор:
1
|
|||||||||||||||||||||||||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 22.03.2019, 15:04 | ||
|
IGPIGP, Если говорить коротко - в С++ есть правило, грубо сформулировать его можно так:
Ну и ссылки в конце страницы, в т.ч. на стандарт.
0
|
||
|
Модератор
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
|
||||||
| 22.03.2019, 16:49 | ||||||
|
Думаю, дабы такие проблемы не возникали стоит писать более осмысленные выражения:
0
|
||||||
|
Комп_Оратор)
|
||
| 22.03.2019, 17:01 [ТС] | ||
|
Не по теме: zss я попросил исправить слово "согдания" на "создания" в заголовке. zss, у вас где-то компилируется то, что вы предложили? Если да, то осмысленным ответом была бы версия компилятора, У меня ваш совет не помогает ни в 2008 ни в MinGW C:\....\ConsoleTest\main.cpp:2002: ошибка: redefinition of 'i' with a different type: 'Seq_squer_logger' vs 'int'
0
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||
| 22.03.2019, 17:01 | ||
|
Если доп. скобки говорят что внутри выражение стоит воспринимать как lvalue - вероятно тогда парсер делает адекватный разбор выражение, но это очень не точно, эта штука с дужками которую я описал выше так работает с decltype, а его тут нету, так что никакого lvalue здесь может тоже нету, а скобки - просто подсказка.
1
|
||
|
Модератор
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
|
||||||
| 22.03.2019, 17:04 | ||||||
|
Visual Studio 2017
И по моему обязано компилироваться, т.к. это явное указание на вызов конструктора из класса Seq_squer_logger
1
|
||||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 22.03.2019, 17:08 | |
|
1
|
|
|
Модератор
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
|
|
| 22.03.2019, 17:10 | |
|
0
|
|
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||
| 22.03.2019, 17:11 | |||
|
Вот так точно работает:
Ошибка вызова конструктора преобразования с аргументом - переменной в области действия данной переменной Ну и последствующие посты, от гуру в т.ч. это - https://en.wikipedia.org/wiki/Most_vexing_parse
1
|
|||
|
Комп_Оратор)
|
|||||||||
| 22.03.2019, 17:16 [ТС] | |||||||||
|
eva2326, вы пишете именно то, что пишут компиляторы. И похоже что так оно и есть.
Однако, вызов
Если вы покажете, что может рухнуть от попытки научить компилятор спокойно делать такой вызов, я сдаюсь. Добавлено через 52 секунды Добавлено через 2 минуты
0
|
|||||||||
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
||||||||
| 22.03.2019, 17:17 | ||||||||
1
|
||||||||
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
|
|||
| 22.03.2019, 17:22 | |||
Seq_squer_logger((int)a);Потому что выражение (int)a никак не может быть именем переменной.А значит вся запись: Seq_squer_logger((int)a); никак не может быть объявлением переменной.А значит она может быть только и только вызовом функции (в данном случае - конструктором)
0
|
|||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||||||||||||
| 22.03.2019, 17:28 | ||||||||||||||
Ну, почти тоже, копирование упустим) Здесь должен быть явный вызов контруктора и неоднозначности быть не может. У меня msvc v19.0 билдит окей. Seq_squer_logger (int)a; <- здесь то и заставляем не убирать внешние скобки.Но и так работает
0
|
||||||||||||||
|
Комп_Оратор)
|
||
| 22.03.2019, 17:28 [ТС] | ||
|
0
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 22.03.2019, 17:30 | |
|
0
|
|
|
Комп_Оратор)
|
|||||||||||||
| 22.03.2019, 17:38 [ТС] | |||||||||||||
|
eva2326, если есть и (объявлен и определён) конструктор:
Добавлено через 3 минуты
0
|
|||||||||||||
| 22.03.2019, 17:38 | |
|
Помогаю со студенческими работами здесь
20
Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С Как присвоить значение переменной в строке вызова скрипта?
Действия в переменной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|