С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]|

14.03.2014, 09:55. Показов 4938. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
class TUID
{
 public:
 char Data[33];
 TUID ();
 operator ++ ();
};
C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]|
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.03.2014, 09:55
Ответы с готовыми решениями:

error: ISO C++ forbids declaration of 'Time' with no type
#ifndef _TIMELL_H #define _TIMELL_H #include <iostream> #include <string> #include "Time.h" using namespace std; ...

Error: ISO C++ forbids declaration of "Link" with no type
выдает кучу ошибок, три основные: sorted_list.h:8: error: ISO C++ forbids declaration of ‘Link’ with no type sorted_list.h:8: error:...

ISO C++ forbids declaration of 'c' with no type
Компилятор выдает ошибку при выполнении данного кода, в чем ошибка? #include <iostream> using namespace std; template...

18
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
14.03.2014, 09:58
Вы не указали тип возвращаемого значения функции operator++
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
14.03.2014, 09:58
Цитата Сообщение от taras atavin Посмотреть сообщение
operator ++ ();
возвращать что-то должен
0
2393 / 1914 / 763
Регистрация: 27.07.2012
Сообщений: 5,559
14.03.2014, 10:44
Да не просто что-то, а TUID &
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
14.03.2014, 10:55
Вернуть можно любой тип. Просто логично возвратить ссылку на TUID.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.03.2014, 11:15  [ТС]
А опрератор копирующего присваивания что должен возвращать? Тоже
C++
1
TUID&
, или
C++
1
TUID
?
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
14.03.2014, 11:18
Да что угодно. Вопрос в том как вы будете использовать результат.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.03.2014, 11:26  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
Да что угодно.
Ога. Возводящая в степень перегрузка оператора сложения тоже допустима. Я не спрашиваю, что проглотит компиялтор, я спрашиваю, как правильно. Так что ответы на тему приведения программы в состояние алкогольного опьянения попрошу держать при себе.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
14.03.2014, 11:30
Цитата Сообщение от taras atavin Посмотреть сообщение
я спрашиваю, как правильно.
ссылку на *this (Мейерс. Эффективное использование C++)
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.03.2014, 11:33  [ТС]
То есть
C++
1
2
3
4
5
6
class TUID
{
...
 const TUID &operator = (TUID Original);
...
};
?
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
14.03.2014, 11:36
taras atavin, сори ошибся, я подправил коммент

Добавлено через 53 секунды
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
const TUID &operator = (TUID Original);
C++
1
TUID &operator = (const TUID & Original);
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
14.03.2014, 11:36
Что должен - зависит о ваших потребностей.
Что может - может много чего. Зависит от стандарта.
1
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
14.03.2014, 11:55
taras atavin, еще раз повторюсь, что правильно зависит от вас. Хрен его знает для чего предназначен ваш класс и что ОЗНАЧАЮТ ваши операции с ним. Вполне может быть, что ваш класс не должен вести себя вот таким образом:
C++
1
2
TUID a, b, c;
a = b = c;
И причин для этого может быть множество.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.03.2014, 11:58  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
В полне может быть, что ваш класс не должен вести себя вот таким образом:
TUID a, b, c;
a = b = c;
. Это с какой стати? Если оператор-член существует, то он должен полностью поддерживать весь синтаксис, возможность которого декларирована в стандарте, а его семантика должна соответствовать назначению класса и самому оператору.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
14.03.2014, 12:01
Цитата Сообщение от taras atavin Посмотреть сообщение
, возможность которого декларирована в стандарте
А вы уверены, что тип возвращаемого значения оператора = описан в стандарте?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
14.03.2014, 13:52
Цитата Сообщение от taras atavin Посмотреть сообщение
Это с какой стати? Если оператор-член существует, то он должен полностью поддерживать весь синтаксис, возможность которого декларирована в стандарте, а его семантика должна соответствовать назначению класса и самому оператору.
Семантику оператора определяет программист. Если ты, например, откроешь библиотеку boost::spirit, то увидишь, что там куча операторов переопределены так, чтобы было удобно писать грамматику, то есть они не соответствуют своим встроенным аналогам. Сделано это для удобства и для конкретной задачи.
Однако есть так называемый принцип наименьшего удивления. Когда другой программист смотрит твой код, то у него как можно меньше должны лезть глаза на лоб Поэтому в типовых задачах правильнее определять семантику операторов так же, как она определена для встроенных типов. В стандарте нет строгих требований к возвращаемому значению оператора=. Однако есть примеры, которые можно брать за основу при решении типовых задач. Но строгим это правило нельзя назвать все равно. Исключения из него могут быть вполне.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.03.2014, 15:10  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Семантику оператора определяет программист. Если ты, например, откроешь библиотеку boost::spirit, то увидишь, что там куча операторов переопределены так, чтобы было удобно писать грамматику, то есть они не соответствуют своим встроенным аналогам.
Оператор плюс в классе комплексных числе тоже такому же плюсу в типе float нифига не соответствует. Но в правильной проге он соответствует операции сложения и назначению класса. А превращать его в сокращение оператора плюс равно значит запутывать того, кто будет этот класс юзать.

Добавлено через 2 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
В стандарте нет строгих требований к возвращаемому значению оператора=.
Ну разумеется явно тип не указан, иначе бы оператор вообще не перегрузился на не правильный тип.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
14.03.2014, 17:28
Цитата Сообщение от taras atavin Посмотреть сообщение
А превращать его в сокращение оператора плюс равно значит запутывать того, кто будет этот класс юзать.
Ну именно об этом я и написал. Про принцип наименьшего удивления.

Однако я хотел бы отметить, что догматичность в суждениях в этом вопросе тоже неуместна. Есть конкретная ситуация и мы должны, как профессионалы ее оценить. Если сложение на самом деле выполняет деление, это конечно плохо. Но если сложение выполняет операцию склеивания строк? Это сделано во многих классах строк и уже не кажется экзотикой, но если слишком догматично подойти к вопросу, то окажется что и этого нельзя было делать. Однако практика показывает, что это не так. Или более характерный пример, оператор сдвига << в iostream, который на самом деле ввод в поток... Тоже, ведь если слишком строго рассуждать, можно додуматься до того, что это плохо. Но ведь используют и уже почти все привыкли.
Ну а в том же boost::spirit, например оператор звездочка совсем не разыменование, унарные плюсы и минусы скорее похожи на подобные в регулярных выражениях, чем на обычные и т.п. Но это не плохо, потому что в рамках задачи - это оправдано, и если разобраться в этом есть логика, просто работают другие ассоциации.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.03.2014, 17:36  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Но если сложение выполняет операцию склеивания строк?
Ну конкатенацию вполне логично считать видом сложения. Ну вот так оно для строк определено и всё. Ни кого же не удивляет алгоритм умножения матриц.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2014, 17:36
Помогаю со студенческими работами здесь

ISO C++ forbids declaration of with no type
Здравстуйте! Недавно начал изучать С++. В коде возникла ошибка: Line 23| ISO C++ forbids declaration of 'roman' with no type. Подскажите,...

ISO C++ forbids declaration of 'main' with no type
Здравствуйте! Возникла ошибка в коде, никак не могу понять что где неправильно написал. Помогите кто может! Заранее благодарен! Задание...

C:\tsserver\Projects\cpp\codeblocks\MyComp\compiler\mmz\mmz. cpp|29|error: no match for 'operator=' in '* Item = * Source'|
char **Source; TArray&lt;std::string&gt; *Item; ... *Item=*Source;

Ошибка при сборке "ISO C++ forbids declaration of ‘p’ with no type [-fpermissive]"
Добрый день. Пробую запустить код с этого сайта. Сам код (пути до файлов указал свои) #include &lt;opencv/cv.h&gt; #include...

Error C:\Projects\test\TLongInteger.cpp|177|undefined reference to `r8w'|
asm ( &quot;.intel_syntax noprefix\n&quot; &quot;push r8w;\n&quot; &quot;push edx;\n&quot; &quot;push ecx;\n&quot; &quot;push ebx;\n&quot; &quot;push eax;\n&quot; &quot;mov...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru