Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 01.04.2015
Сообщений: 5
1

Перегрузка оператора <<

09.12.2015, 03:15. Показов 1061. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте форумчане, помогите исправить ошибку.
Вообщем есть класс с перегруженным оператором << .

Category.h
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Category
{
public:
    string categoryName;
 
    Category(void);
    ~Category(void);
    Category(string _categoryName);
 
private:
 
    friend ofstream& operator<<(ofstream& out, Category categoryObj);
    friend ifstream& operator>>(ifstream& in, Category &categoryObj);
};


Category.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
27
28
29
30
31
#include "stdafx.h"
#include "Category.h"
 
 
Category::Category(void)
{
}
 
 
Category::~Category(void)
{
}
 
Category::Category(string _categoryName)
{
categoryName = _categoryName;
}
 
ofstream& operator<<(ofstream& out, Category categoryObj)
{
        out << categoryObj.categoryName << "\n"; //          Здесь выдает ошибку!!!
    return out;
}
 
 
ifstream& operator>>(ifstream& in, Category &categoryObj)
{
    in >> categoryObj.categoryName;
    in.get();
    return in;
}


Когда есть мой конструктор с одним входным параметром выдает такую ошибку
Ошибка
Кликните здесь для просмотра всего текста

1 IntelliSense: more than one operator "<<" matches these operands:
function "operator<<(std::ofstream &out, Category categoryObj)"
function template "std::basic_ostream<_Elem, _Traits> &std::operator<<(std::basic_ostream<_Elem, _Traits> &_Ostr, const std::basic_string<_Elem, _Traits, _Alloc> &_Str)"
operand types are: std::ofstream << std::string c:\Users\Vlad\Documents\Visual Studio 2012\Projects\CourseProject\CourseProject\Category.cpp 21 6 CourseProject

Если же убрать пользовательский конструктор Category(string _categoryName), ошибка исчезает.
Подскажите в чем проблема, заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2015, 03:15
Ответы с готовыми решениями:

Перегрузка оператора <<
Вот упрощенный вариант моей программы, пересчитывает время в 12-й формат мне нужно перегрузить...

Перегрузка оператора
Есть такой вот код: #include &lt;iostream&gt; using namespace std; template &lt;class T&gt; class LIST {...

Перегрузка оператора <<
Как вот в таком классе перегрузить оператор &lt;&lt;? #ifndef MATRIXX_H #define MATRIXX_H #include...

Перегрузка оператора =
Нужно перегрузить оператор так что бы в начале строки и в конце были квадратные скобки . Все почти...

3
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
09.12.2015, 03:57 2
Лучший ответ Сообщение было отмечено vlad_exp как решение

Решение

В том что конструктор с одним параметром трактуется как оператор преобразования этого параметра в Category. Далее компилятор думает "так мне создавать временный объект Category или параметр как есть печатать?".

ofstream& operator<<(ofstream& out, Category categoryObj) ofstream& operator<<(ofstream& out, const Category& categoryObj)
Или explicit в начало объявления конструктора.
1
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
09.12.2015, 04:28 3
Цитата Сообщение от vlad_exp Посмотреть сообщение
ofstream
- надо ostream
Цитата Сообщение от vlad_exp Посмотреть сообщение
ifstream
- надо istream
Ну и перед стандартными именами надо ставить std::
0
0 / 0 / 1
Регистрация: 01.04.2015
Сообщений: 5
09.12.2015, 11:25  [ТС] 4
Благодарю, explicit то, что нужно.
0
09.12.2015, 11:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2015, 11:25
Помогаю со студенческими работами здесь

Перегрузка оператора =
Здравствуйте! При попытке заменить объект пользовательского класса q4 на q6 в контейнере set...

Перегрузка оператора <<
Доброго времени суток. В общем задача состоит в том, чтобы перегрузить операторы &gt;&gt; и &lt;&lt; для...

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

Перегрузка оператора []
Всем привет! Как можно перегрузить оператор так, чтобы к нему можно было обращаться так:...

Перегрузка оператора []
Есть: class any{ char arr }

Перегрузка оператора <<
Здравствуйте! Подскажите, пожалуйста, как выполнить перегрузку оператора &lt;&lt;? Для двух...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru