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

Перегрузка операторов ввода вывода - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
19.09.2013, 19:37     Перегрузка операторов ввода вывода #1
в .h файле сделал объявление
C++
1
2
inline ostream& operator <<(ostream&, const Proc&);
inline istream& operator >>(istream&, Proc&);
в .cpp реализация
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
inline istream& operator >>(istream& is, Proc& obj)
{
    short val;
 
    cout << "Name: ";
    is >> obj.name;
    cout << "Number: ";
    is >> obj.num;
 
    for(int i=0; i<obj.num; ++i)
    {
        is >> val;
        obj.col.push_back(val);
    }
    return is;
}
 
inline ostream& operator <<(ostream& os, const Proc& obj)
{
    os << "Name: " << obj.name << endl;
    os << "Numbers: " << obj.num << endl;
    for(int i=0; i<obj.num; i++)
        os << i+1 << ". " << obj.col[i] << endl;
 
    return os;
}
компилятор ругается на оператор ввода ошибка: undefined reference to `operator>>(std::istream&, Proc&)'
до переноса реализации из хедера в срр все работало
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
19.09.2013, 20:18     Перегрузка операторов ввода вывода #21
Хулиган, А да кудаив вроде прав инлайн функции должны вроде полностью определяться в заголовочном файле.

Добавлено через 43 секунды
Ладно щас у себя попробую мб заработает.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
19.09.2013, 20:22     Перегрузка операторов ввода вывода #22
Цитата Сообщение от _ Посмотреть сообщение
я скопировал эту программу себе в код блокс и все работает.
соврал. вообщем она компилировалась, но кода в main написал
C++
1
2
3
    Proc ppp;
 
    cin >> ppp;
то появилась эта ошибка
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2013, 20:23     Перегрузка операторов ввода вывода #23
Хулиган, inline уберите и заработает.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
19.09.2013, 20:23     Перегрузка операторов ввода вывода #24
надо поубирать все inline-ы, как написал кудаив
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
19.09.2013, 20:24     Перегрузка операторов ввода вывода #25
Хулиган, а если вообще inline убрать?
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
19.09.2013, 20:25     Перегрузка операторов ввода вывода #26
Хулиган, У меня не ругается компилирует нормально. Я в main их не использую просто подключаю #include "name.h". Попробуй просто их подключить без использования мб скомпилирует нормально, то тогда понятно будет что ошибка в самой функции.

Добавлено через 40 секунд
Визуал студио 2010 с инлайном компилирует нормально без ошибок.
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
19.09.2013, 20:27  [ТС]     Перегрузка операторов ввода вывода #27
Цитата Сообщение от Кудаив Посмотреть сообщение
а если вообще inline убрать?
гениально, как я понял если делать реализацию с хедере то надо инлайн, если реализация в срр то не надо)
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
19.09.2013, 20:32     Перегрузка операторов ввода вывода #28
Хулиган, заработало, нет?
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
19.09.2013, 20:34     Перегрузка операторов ввода вывода #29
Цитата Сообщение от Хулиган Посмотреть сообщение
гениально, как я понял если делать реализацию с хедере то надо инлайн, если реализация в срр то не надо)
Да молодец ты и меня просветил, оказывается с инлайнами ошибка, если просто то компилируется, а если с использованием функций, у меня писало ошибку ссылка на не разрешонный внешний символ, удалил инлайны заработало. Молодец будем теперь знать.

Добавлено через 1 минуту
Хулиган, Слышишь давай еще уточним, а что значит если функция определена как инлай, это значит что ее код явно прописывается в программе. А если просто функция без инлайн, то тогда что в программе ставится пометка вызвать такую то функцию? Просвети новичка!!!!
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
19.09.2013, 20:39  [ТС]     Перегрузка операторов ввода вывода #30
Цитата Сообщение от Кудаив Посмотреть сообщение
заработало, нет?
да

Добавлено через 1 минуту
Цитата Сообщение от ninja2 Посмотреть сообщение
Просвети новичка!!!!
.h файл подключи и будет счастье

Добавлено через 2 минуты
Цитата Сообщение от Кудаив Посмотреть сообщение
заработало, нет?
изначально при совете убрать инлайны я их убирал только в реализации
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
19.09.2013, 20:39     Перегрузка операторов ввода вывода #31
Цитата Сообщение от ninja2 Посмотреть сообщение
Просвети новичка!!!!

Не по теме:

ты же гуру. Зачем тебя просвещать? Ты же в каждой теме пишешь что С++ уже выучил

ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
19.09.2013, 20:43     Перегрузка операторов ввода вывода #32
Цитата Сообщение от Хулиган Посмотреть сообщение
.h файл подключи и будет счастье
Да подключил все работает, только с инлайн не работает, если без инлайна то работает, я вообще хочу узнать что дает нам инлайн. Правильно ж если функция определена инлайн, то ее код явно прописывается в программе, а если без инлайн, то просто хз. откуда происходит вызов функции, Так как вызов функции затратный, то мы и ставим инлайн, что бы как то оптимизировать программу, и программа с инлайн функциями по идее должна быть побольше размером той программы где функции не инлайн я прав???? Просто не охота экспериментировать.

Добавлено через 1 минуту
Цитата Сообщение от coloc Посмотреть сообщение
ты же гуру. Зачем тебя просвещать? Ты же в каждой теме пишешь что С++ уже выучил
У меня шаткие знания, я уверенно не могу сказать что именно так. Примерно знаю как, но не уверен что так. Знания еще не окрепли.
(гуру не должен отчитываться каждому зачем и почему )

Добавлено через 1 минуту
Хулиган, Просвети новичка!!!
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
19.09.2013, 20:46  [ТС]     Перегрузка операторов ввода вывода #33
Цитата Сообщение от ninja2 Посмотреть сообщение
Просвети новичка!!!
что от меня требуется? я только сегодня узнал что такое .h файлы....гугл в помощь, ваша репутация не позволяет мне давать вам советы

Добавлено через 20 секунд
тема закрыта
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
19.09.2013, 20:46     Перегрузка операторов ввода вывода #34
Цитата Сообщение от ninja2 Посмотреть сообщение
просто хз. откуда происходит вызов функции
программа обращается по адресу функции, при инлайн код функции встраивается код функции
Цитата Сообщение от ninja2 Посмотреть сообщение
с инлайн функция по идее должна быть побольше той программы гед функции не инлайн
по идее - да, инлайн - это оптимизация и компилятор не обязан встраивать код такой функции в место вызова - существует ряд правил - функция становится не инлайн, если в ней есть ветвления, рекурсия, циклы...
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
19.09.2013, 20:50     Перегрузка операторов ввода вывода #35
Цитата Сообщение от Хулиган Посмотреть сообщение
что от меня требуется? я только сегодня узнал что такое .h файлы....гугл в помощь, ваша репутация не позволяет мне давать вам советы
Да ладно я не гордый. Я думал ты знаешь раз инлайн используешь, от решил воспользоваться возможностью и как бы невзначай спросить. Не переживай.

Кудаив, О я так и думал, но чото все время раньше когда встречал этот инлайн боялся его, ну щас уже вроде яснее стало, немножко яснее.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
19.09.2013, 20:53     Перегрузка операторов ввода вывода #36
получается, если инлайнить функцию, то в .cpp файле ее не видно?
undefined reference to `operator>>(std::istream&, Proc&)'|
а только один ее прототип в .h файле
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
19.09.2013, 20:57     Перегрузка операторов ввода вывода #37
_, Ну у меня например такая ошибка с инлайн:
main.obj : error LNK2019: ссылка на неразрешенный внешний символ "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,struct Proc const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABUProc@@@Z) в функции _main
1>C:\test\test\Debug\test.exe : fatal error LNK1120: 1 неразрешенных внешних элементов

Если без инлайна то все компилируется хорошо.
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
19.09.2013, 20:58     Перегрузка операторов ввода вывода #38
_, как видно из вышерасположенных сообщений - некоторые компиляторы способны прососать код, как у ТС в топике
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
19.09.2013, 21:00     Перегрузка операторов ввода вывода #39
Цитата Сообщение от ninja2 Посмотреть сообщение
Ну у меня например такая ошибка с инлайн:
это не ошибка, в целый роман зачитаться можно

Кудаив, у меня такая же ошибка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2013, 21:09     Перегрузка операторов ввода вывода
Еще ссылки по теме:

Перегрузка операторов ввода/вывода C++
Перегрузка операторов ввода и вывода C++
C++ Перегрузка операторов присваивания, ввода, вывода

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

Или воспользуйтесь поиском по форуму:
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
19.09.2013, 21:09     Перегрузка операторов ввода вывода #40
MinGW 10.0 32bit - тасовал inline по всякому - туда сюда - работает
Yandex
Объявления
19.09.2013, 21:09     Перегрузка операторов ввода вывода
Ответ Создать тему
Опции темы

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