Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 09:55     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #1
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]|
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
14.03.2014, 09:58     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #2
Вы не указали тип возвращаемого значения функции operator++
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.03.2014, 09:58     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #3
Цитата Сообщение от taras atavin Посмотреть сообщение
operator ++ ();
возвращать что-то должен
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
14.03.2014, 10:44     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #4
Да не просто что-то, а TUID &
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
14.03.2014, 10:55     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #5
Вернуть можно любой тип. Просто логично возвратить ссылку на TUID.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 11:15  [ТС]     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #6
А опрератор копирующего присваивания что должен возвращать? Тоже
C++
1
TUID&
, или
C++
1
TUID
?
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
14.03.2014, 11:18     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #7
Да что угодно. Вопрос в том как вы будете использовать результат.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 11:26  [ТС]     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #8
Цитата Сообщение от Ilot Посмотреть сообщение
Да что угодно.
Ога. Возводящая в степень перегрузка оператора сложения тоже допустима. Я не спрашиваю, что проглотит компиялтор, я спрашиваю, как правильно. Так что ответы на тему приведения программы в состояние алкогольного опьянения попрошу держать при себе.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 11:30     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #9
Цитата Сообщение от taras atavin Посмотреть сообщение
я спрашиваю, как правильно.
ссылку на *this (Мейерс. Эффективное использование C++)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 11:33  [ТС]     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #10
То есть
C++
1
2
3
4
5
6
class TUID
{
...
 const TUID &operator = (TUID Original);
...
};
?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.03.2014, 11:36     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #11
taras atavin, сори ошибся, я подправил коммент

Добавлено через 53 секунды
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
const TUID &operator = (TUID Original);
C++
1
TUID &operator = (const TUID & Original);
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
14.03.2014, 11:36     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #12
Что должен - зависит о ваших потребностей.
Что может - может много чего. Зависит от стандарта.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
14.03.2014, 11:55     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #13
taras atavin, еще раз повторюсь, что правильно зависит от вас. Хрен его знает для чего предназначен ваш класс и что ОЗНАЧАЮТ ваши операции с ним. Вполне может быть, что ваш класс не должен вести себя вот таким образом:
C++
1
2
TUID a, b, c;
a = b = c;
И причин для этого может быть множество.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 11:58  [ТС]     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #14
Цитата Сообщение от Ilot Посмотреть сообщение
В полне может быть, что ваш класс не должен вести себя вот таким образом:
TUID a, b, c;
a = b = c;
. Это с какой стати? Если оператор-член существует, то он должен полностью поддерживать весь синтаксис, возможность которого декларирована в стандарте, а его семантика должна соответствовать назначению класса и самому оператору.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
14.03.2014, 12:01     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #15
Цитата Сообщение от taras atavin Посмотреть сообщение
, возможность которого декларирована в стандарте
А вы уверены, что тип возвращаемого значения оператора = описан в стандарте?
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
14.03.2014, 13:52     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #16
Цитата Сообщение от taras atavin Посмотреть сообщение
Это с какой стати? Если оператор-член существует, то он должен полностью поддерживать весь синтаксис, возможность которого декларирована в стандарте, а его семантика должна соответствовать назначению класса и самому оператору.
Семантику оператора определяет программист. Если ты, например, откроешь библиотеку boost::spirit, то увидишь, что там куча операторов переопределены так, чтобы было удобно писать грамматику, то есть они не соответствуют своим встроенным аналогам. Сделано это для удобства и для конкретной задачи.
Однако есть так называемый принцип наименьшего удивления. Когда другой программист смотрит твой код, то у него как можно меньше должны лезть глаза на лоб Поэтому в типовых задачах правильнее определять семантику операторов так же, как она определена для встроенных типов. В стандарте нет строгих требований к возвращаемому значению оператора=. Однако есть примеры, которые можно брать за основу при решении типовых задач. Но строгим это правило нельзя назвать все равно. Исключения из него могут быть вполне.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 15:10  [ТС]     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #17
Цитата Сообщение от DrOffset Посмотреть сообщение
Семантику оператора определяет программист. Если ты, например, откроешь библиотеку boost::spirit, то увидишь, что там куча операторов переопределены так, чтобы было удобно писать грамматику, то есть они не соответствуют своим встроенным аналогам.
Оператор плюс в классе комплексных числе тоже такому же плюсу в типе float нифига не соответствует. Но в правильной проге он соответствует операции сложения и назначению класса. А превращать его в сокращение оператора плюс равно значит запутывать того, кто будет этот класс юзать.

Добавлено через 2 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
В стандарте нет строгих требований к возвращаемому значению оператора=.
Ну разумеется явно тип не указан, иначе бы оператор вообще не перегрузился на не правильный тип.
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
14.03.2014, 17:28     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #18
Цитата Сообщение от taras atavin Посмотреть сообщение
А превращать его в сокращение оператора плюс равно значит запутывать того, кто будет этот класс юзать.
Ну именно об этом я и написал. Про принцип наименьшего удивления.

Однако я хотел бы отметить, что догматичность в суждениях в этом вопросе тоже неуместна. Есть конкретная ситуация и мы должны, как профессионалы ее оценить. Если сложение на самом деле выполняет деление, это конечно плохо. Но если сложение выполняет операцию склеивания строк? Это сделано во многих классах строк и уже не кажется экзотикой, но если слишком догматично подойти к вопросу, то окажется что и этого нельзя было делать. Однако практика показывает, что это не так. Или более характерный пример, оператор сдвига << в iostream, который на самом деле ввод в поток... Тоже, ведь если слишком строго рассуждать, можно додуматься до того, что это плохо. Но ведь используют и уже почти все привыкли.
Ну а в том же boost::spirit, например оператор звездочка совсем не разыменование, унарные плюсы и минусы скорее похожи на подобные в регулярных выражениях, чем на обычные и т.п. Но это не плохо, потому что в рамках задачи - это оправдано, и если разобраться в этом есть логика, просто работают другие ассоциации.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2014, 17:36     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]|
Еще ссылки по теме:

ISO C++ forbids. error C++
C++ ISO C++ forbids declaration of with no type
C:\Projects\mmz\Compile\CompileAMD64\mmzCompileAMD64\TProjec t.cpp|74|error: declaration of 'std::ofstream File' shadows C++

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 17:36  [ТС]     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]| #19
Цитата Сообщение от DrOffset Посмотреть сообщение
Но если сложение выполняет операцию склеивания строк?
Ну конкатенацию вполне логично считать видом сложения. Ну вот так оно для строк определено и всё. Ни кого же не удивляет алгоритм умножения матриц.
Yandex
Объявления
14.03.2014, 17:36     C:\Projects\test\test.cpp|6|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]|
Ответ Создать тему
Опции темы

Текущее время: 20:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru