Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2011, 19:21   #1
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
Печаль проблема с перегрузкой оператора потока в классах - <<

Фрагмент класса:
Код:
class base {
    //тут куча всего
    friend ostream&operator<<(ostream &ostr, const base &b);
};
ошибка:
Код:
 2\database.cpp|29|error: 'std::ostream& base::operator<<(std::ostream&, const base&)' must take exactly one argument|
Что такое?

Последний раз редактировалось monolit111; 27.11.2011 в 19:41.
monolit111 вне форума Ответить с цитированием
Старый 27.11.2011, 19:30   #2
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от monolit111 Посмотреть сообщение
Фрагмент класса:
Код:
class base {
    friend ostream&operator<<(ostream &ostr, const base &b);
    private:
        int n;
};
ошибка:
Код:
 2\database.cpp|29|error: 'std::ostream& base::operator<<(std::ostream&, const base&)' must take exactly one argument|
Что такое?
Во-первых, ошибку у вас выдает в одном предложении, а вы приводите код других предложений. Надо в первую очередь показывать то предложение, в котором возникла ошибка.
У ас компилятор по какой-то причине, мне неизвестной, так как я не вижу весь код, считает, чтовы используете оператор - член вашего класса. Нужно видеть по крайней мере больше текста кода, чтобы сказать что-то определенное.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 27.11.2011, 19:39   #3
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию

это как раз то самое предложение, в котором ошибка))

А вот код, если без него не обойтись...
Код:
#include <string>
#include "string.h"
using namespace std;

struct structura {
        char *facult, *fio;
        int stag;
};
class base {
    private:
        structura vect[100];
        int n;
    public:
        base();
        base(const base &b);
        void add(string name, string facult, int st);
        void add(char* name, char* facult, int st);
        base operator=(const base &b);
        bool operator==(const base &b);
        double sr_stag();
        base new_base(int k);
        ~base();
    friend ostream&operator<<(ostream &ostr, const base &b);//<<<<<<<<<<<<<<<<<<<< это как раз строка 29, в которой ошибка
};
monolit111 вне форума Ответить с цитированием
Старый 27.11.2011, 20:03   #4
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Судя потому, что словао friend у вас в приведенном коде не выделено жирным шрифтом, то значит ваш компилятор не понимает этого слова. Может быть вы пользуетесь очень старым компилятором, которые не имеет представление о ключевом слове friend?

Плпутно, заголовочные файлы должны быть объявлены не как у вас

Код:
#include <string>
#include "string.h"
а следующим образом

Код:
#include <string>
#include <cstring>
Это при условии, что заголовок "string.h" не является вами определенным заголовок, что является очень плохим решением называть свои собственные заголовочные фалы именами, совпадающими со стандартными именами заголовочных файлов.
Со мной можно встретиться на www.clipper.borda.ru

Последний раз редактировалось Сыроежка; 27.11.2011 в 20:08.
Сыроежка вне форума Ответить с цитированием
Старый 27.11.2011, 20:05   #5
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию

в программе friend выделено жирным(хз почему здесь нет)...
monolit111 вне форума Ответить с цитированием
Старый 27.11.2011, 20:12   #6
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Судя потому, что словао friend у вас в приведенном коде не выделено жирным шрифтом, то значит
то значит, анализатор кода на форуме просто не распознал его. Только и всего.
_-Re@l-_ вне форума Ответить с цитированием
Старый 27.11.2011, 20:13   #7
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от monolit111 Посмотреть сообщение
в программе friend выделено жирным(хз почему здесь нет)...
Я понял вашу ошибку. Вы не включили заголовочный файл с именем <iostream>. Поэтому компилятор не понимает, что означает имя ostream
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 27.11.2011, 20:18   #8
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию

как ни странно(для меня) , не помогло...
Че то ему не нравится с количеством параметров...
monolit111 вне форума Ответить с цитированием
Старый 27.11.2011, 20:21   #9
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от monolit111 Посмотреть сообщение
как ни странно(для меня) , не помогло...
Че то ему не нравится с количеством параметров...
Этого не может быть! Показывайте свой исправленный код!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 27.11.2011, 20:25   #10
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

Студия без слова friend генерит похожую ошибку. с френдом - все ок. все таки похоже на глюк компилятора.

2\database.cpp|29|error: 'std:stream& base::operator<<(std:stream&, const base&)' must take exactly one argument|
Кажется, что комилятор думает, что это не дружественная ф-ия, а оператор-мембер. А для них либо один аргумент, либо ни одного.

Последний раз редактировалось _Ч_; 27.11.2011 в 20:28.
_Ч_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема в классах jec Общие вопросы C/C++ 4 29.12.2010 03:39
Проблема с перегрузкой операторов в C++ StudentofSUSU Помощь студентам 2 30.09.2010 10:04
Проблема с перегрузкой операторов, не могу разобраться mrLee Помощь студентам 1 30.01.2010 00:23
Проблема с перегрузкой операторов, не могу разобраться mrLee Общие вопросы C/C++ 0 29.01.2010 18:45
В конструкторе выделяется память под массив. Как быть с перегрузкой оператора = ? TwiX Общие вопросы C/C++ 6 15.12.2009 12:18