Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 13.08.2024
Сообщений: 3

Шаблон функции для вывода с помощью итератора

13.08.2024, 15:08. Показов 3105. Ответов 33

Студворк — интернет-сервис помощи студентам
Здравствуйте! В лабораторной работе написан код шаблона функции для вывода с помощью итератора

C++
1
2
3
4
5
6
7
8
9
10
11
12
template <class T> void pr(T& v, string s)
{
    cout << "\n\n\t" << s << "  # Sequence:\n";
 
    // Итератор любого контейнера
    T::iterator p;
    int i;
 
    for (p = v.begin(), i = 0; p != v.end(); p++, i++)
        cout << endl << i + 1 << ". " << *p;
    cout << '\n';
}
При попытке компиляции строчка
C++
1
T::iterator p;
выдает ошибки:
1) Ошибка C2760 синтаксическая ошибка: непредвиденный токен "идентификатор"; требуется ";"
2) Ошибка C7510 "iterator": при использовании зависимого имени тип необходимо указать префикс "имя типа"

По советам из интернета, прообовал изменять строку на
C++
1
typename T::iterator p;
при этом появляются ошибки линковки.

Подскажите, в чем ошибка и как ее исправить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.08.2024, 15:08
Ответы с готовыми решениями:

Написать шаблон функции для вывода в обратном порядке массива типа int и double
Есть массив, нужно вывести его в обратном порядке

Перегрузка оператора вывода для итератора шаблоного массива
#include &lt;QCoreApplication&gt; #include &lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;stdio.h&gt; #include&lt;unistd.h&gt; using namespace std; ...

Функции для ввода/вывода массивов и матриц с помощью шаблонов и перегрузки
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; template&lt;class T&gt; int mass(T mas, T iSize = sizeof(mas) /...

33
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
14.08.2024, 21:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Royal_X Посмотреть сообщение
здесь так принято еще не отменяли
ну в целом это имеет некоторый смысл. "работает(хоть как-то) - не трогай" и прочие истории. когда понимания нет, остаётся только что-то подобное.

но даже в рамках подобного логика странная. ведь уже есть auto x = 0, * y = (int*){}, где типы также разные.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
14.08.2024, 21:28
Цитата Сообщение от mashmed135 Посмотреть сообщение
ведь уже есть auto x = 0, * y = (int*){}, где типы также разные.
Во-первых, в С++ нет никакого (int*){}. Нет такого синтаксиса.

Во-вторых, что именно имеется в виду под соответствием типов между деклараторами я подробно объяснял выше:

Сразу понятна очевидная железобетонная причина не допускать смешения типов в множественных auto-объявлениях: объявление должно вести себя точно так же, как вели себя объявления в С++ с начала веков. Вся идея auto в С++ построена на едином подходе - это не более чем placeholder для конкретного типа. Во всем остальном этот placeholder ведет себя так же, как ведет себя конкретный тип.
Речь идет о спецификаторе типа всей декларации, т.е. о decl-specifier-seq. Всякие * относятся исключительно к индивидуальным деклараторам, и на тип всей декларации никак не влияют.
0
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
15.08.2024, 08:45
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Во-первых, в С++ нет никакого (int*){}. Нет такого синтаксиса.
есть. просто ты ничего не знаешь о с++.

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

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Сразу понятна очевидная железобетонная причина не допускать смешения типов в множественных auto-объявлениях: объявление должно вести себя точно так же, как вели себя объявления в С++ с начала веков
это сразу мимо. никакое начало веков никого не интересует. а так, для тебя есть железобетонное решение - пиши на цпп98 - там никаких проблем с авто нет, как и самого авто. да и в целом всё ведёт себя так же, как в начале веков - как ты и хотел.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вся идея auto в С++ построена на едином подходе - это не более чем placeholder для конкретного типа. Во всем остальном этот placeholder ведет себя так же, как ведет себя конкретный тип.
неверно. никаким "для конкретного типа" авто не является. я не знаю, как можно приходить к подобным выводам, ведь даже в стандарте есть auto... и auto [...], где типы также разные.

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

далее возникает вопрос: с чего вдруг ограничения для одного случая должны продуцировать запреты для другого? особенно в ситуации, когда отсутствие этих запретов обладает преимуществами? а ни с чего. никто и нигде не ориентируется на самый примитивный уровень и не ограничивает на этом основании уровень менее примитивного(ну кроме сектантов, конечно).

в общем, всем срочно нужно перестать говорить - ведь есть немые, которые не могут этого делать. да и с начала веков никакой речи не существовало.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
15.08.2024, 09:08
Цитата Сообщение от mashmed135 Посмотреть сообщение
есть. просто ты ничего не знаешь о с++.
Давно у нас не было таких жыыыырных троллей Или это кто-то из старых знакомых под новым именем?

После этого "есть" дальше можно не читать. Спасибо, что в начало вынес.
1
фрилансер
 Аватар для Алексей1153
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
15.08.2024, 09:11
TheCalligrapher, так это очень давний пациент, в очередной раз из бани вернулся. Он не надолго приходит
1
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
15.08.2024, 09:19
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Давно у нас не было таких жыыыырных троллей
читаем правильно: "мне нечего ответить и я решил съехать с темы на какую-то левую муру(типа троллей). ведь если я попытаюсь ответить что-то конкретное, то похороню себя как эксперта". в очередной раз, удивительное рядом.

но в целом, молодец, место своё уже знаешь. осталось только в моё отсутствие не строить из себя кого-то выше рядового.

Добавлено через 3 минуты
Цитата Сообщение от Алексей1153 Посмотреть сообщение
TheCalligrapher, так это очень давний пациент, в очередной раз из бани вернулся. Он не надолго приходит
ты бы вместо того, чтобы подсасываться к кому-то, попытался бы мне ответить. если уж декларируешь поддержку мнения - так поддержи это мнение, аргументируй. но почему-то ни ты, ни кто-либо иной этого сделать не смог. почему?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6296 / 3018 / 1053
Регистрация: 01.06.2021
Сообщений: 11,455
15.08.2024, 10:03
GCC компилирует без ошибки и такой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
struct A
{
    auto foo(), bar();
};
 
auto A::foo() { return 42; }
auto A::bar() { return 3.14; }
 
int main()
{
    A a;
    std::cout << a.foo() << ' ' << a.bar();
}
Но все эти случаи известны разрабам еще с 2017 года, а быть может и раньше.
Например, они давно обсуждали данную проблему и пришли к выводу, что парсер не в состоянии выявить такие проблемы и им нужно разработать доп. дерево или вектор для переменных, чей тип не был выявлен при парсинге.

if auto deduction can't be performed during the parsing, because the initializers have dependent types, it is premature to diagnose inconsistent deduction, the deduction might be inconsistent, but might be consistent as well.
But this also reveals that without extra infrastructure, we don't and can't diagnose invalid cases
After parsing we loose the information which variables have been declared together and what auto deduction has been performed. So perhaps we'd need some extra tree that would hold a vector of variables (for those not deduced during parsing) and auto_result (for those deduced during parsing) and during instantiation check for the inconsistencies again.
Я так понимаю, баг очень глубокий и сложный в исправлении. Причем, разрабы полностью осведомлены в его существовании.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
15.08.2024, 10:14
ну т.е. разработчикам компиляторов на самом деле проще сделать интерпретацию
auto a,b,c
как
auto a; auto b; auto c;
Что, вообще говоря (по моему скромному мнению) даже в чем-то логично при чтении программы (но только в чем-то, зависит от "применяемой логики", ибо логику можно подвести и для той, и для другой интерпретации, если честно).

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

Как вариант, gcc ждут когда стандарт в этом месте перепишут.
Тоже вполне себе подход: менять ТЗ, а не код
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
15.08.2024, 10:31
Цитата Сообщение от KSergey9 Посмотреть сообщение
Получается разработчики стандарта подумали той логикой, которая сложнее в реализации компилятора.
Откуда такой вывод?

Разработки стандарта изначально вообще собирались запретить множественные деклараторы в объявлении с placeholder, то есть собирались именно идти по более простому пути. Возможность указывать множественные деклараторы в таком объявлении - результат последующих предложений, в частности https://open-std.org/jtc1/sc22... /n1737.pdf

Собственно, в большинстве случаев тема не стоит и выеденного яйца, ибо "почти всегда" можно просто разобрать одно объявление на несколько. Трудности возникают только в таких контекстах, как, например, for. Но эти трудности на само деле не имеют отношение к auto вообще. Это извечная проблема for. Даже безо всякого auto иногда хочется иметь возможность объявить несколько переменных раных типов в заголовке for. Если эта проблема будет решена, то это решение распространится и на auto.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
15.08.2024, 10:46
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Разработки стандарта изначально вообще собирались запретить множественные деклараторы в объявлении с placeholder,
Но сделали ведь не так, судя по ране процитированным в этой теме фрагментам стандарта
Шаблон функции для вывода с помощью итератора (это же стандарт процитирован? или просто предложения? я не вникал в источник)

Я же говорю о том как сделали, а не о том, что обсуждалось.

Добавлено через 1 минуту
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Откуда такой вывод?
Из процитированного ответа разработчиков
https://www.cyberforum.ru/post17376746.html
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
15.08.2024, 11:02
Цитата Сообщение от KSergey9 Посмотреть сообщение
Из процитированного ответа разработчиков
https://www.cyberforum.ru/post17376746.html
Но это ответ разработчиков GCC, а не разработчиков стандарта.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
15.08.2024, 11:34
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Но это ответ разработчиков GCC, а не разработчиков стандарта.
Так.
Но стандарт диктует иное поведение, верно?

Может вы перечитаете то что я написал? может я как-то невнятно изложил?
Шаблон функции для вывода с помощью итератора
Я не понимаю с чем вы спорите. Складывается впечатление, что спорите ради спора. При этом пишете всё то, что я написал изначально. Не в смысле что я умный, а в смысле я никак не могу понять о чем вы со мной спорите.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
15.08.2024, 11:41
Цитата Сообщение от KSergey9 Посмотреть сообщение
Может вы перечитаете то что я написал? может я как-то невнятно изложил?
Вот наш диалог, по шагам (выделение жирным моё):

Вы #28: Получается разработчики стандарта подумали той логикой, которая сложнее в реализации компилятора.
Я #29: Откуда такой вывод? Разработчики стандарта изначально... (и т.д.)
Вы #30: Из процитированного ответа разработчиков (и внезапно ссылка на ответ разработчиков компилятора)
Я #31: ¯\_(ツ)_/¯ (в недоумении: при чем здесь разработчики компилятора, если изначально мы оба вели речь о разработчиках стандарта?)

Цитата Сообщение от KSergey9 Посмотреть сообщение
Я не понимаю с чем вы спорите.
Я пока не вижу здесь никакого спора из-за некоторой... эээ... бессвязности переписки, пример которой я привел выше.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
15.08.2024, 11:56
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
бессвязности переписки, пример которой я привел выше.
Мне она не видится бессвязной с моей стороны, что, вероятно, логично.

Я для простоты оставлю "Вы" и "Я" так, как было в вашем тексте, хорошо? просто чтобы еще раз не запутаться нам с вами.
И допишу курсовом свои уточнения.

Вы #28: Получается разработчики стандарта подумали той логикой, которая сложнее в реализации компилятора.
Я #29: Откуда такой вывод? Разработчики стандарта изначально... (и т.д.)
Я не понимаю какая разница о чем разработчики стандарта думали изначально. Возможно они даже перебирали множество вариантов.
Однако остановились в итоге на том, что сложнее при разработке компилятора. Так ведь? Ровно об этом я и писал.
Вероятно здесь я не очень удачно употребил фразу "подумали той логикой". Однако под ней я подразумевал финальное решение, вошедшее стандарт, а не весь процесс обдумывания этой фичи языка вообще.



Вы #30: Из процитированного ответа разработчиков (и внезапно ссылка на ответ разработчиков компилятора)
Здесь под "разработчиками" я имел ввиду разработчиков именно компилятора, а не писателей стандарта; тут видимо терминологическая опять путаница и смешение произошло из-за неидеально точных формулировок с моей стороны.


Я #31: ¯\_(ツ)_/¯ (в недоумении: при чем здесь разработчики компилятора, если изначально мы оба вели речь о разработчиках стандарта?
Очень надеюсь, что теперь все недоумения и недопонимания разрешились.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.08.2024, 11:56

С помощью механизма перегрузки функций реализовать функции для вывода на экран
(17) С помощью механизма перегрузки функций реализовать функции для вывода на экран (первый параметр – тип выводимого значения ) ...

шаблон функции вывода на экран массива string
Доброго времени суток, форумчане! Подскажите такой вот момент: создаю шаблон функции вывода на экран одномерного массива. Для...

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

Шаблон вывода для редактирования поста (страница)
Доброго времени суток, господа! Подскажите как мне создать шаблон страницы для простого пользователя чтобы он редактировал свою запись не...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru