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

Почему дружественная функция с перегруженным оператором << не имеет доступа к данным класса? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ нахождение Максимальной длины имени объекта Fat32 http://www.cyberforum.ru/cpp-beginners/thread359682.html
Прошу помощи,подсказки в решении такой вот задачки(С++Borland3.1) поиск объектов с максимальным количеством символов в имени среди объектов с длинными именами для FAT максимальное к-во-255...
C++ C++ Наследование динамического списка классом стеком. Салют форумчане. Новый курс, новые приключения. Вот и дали задание наследую динамический список создать стек. Список вроде сделал , да стек не пойму как к нему прикрутить. (Какие только велосипеды не... http://www.cyberforum.ru/cpp-beginners/thread359680.html
Литература по структурам данных и алгоритмам C++
Доброго Времени Суток! Хочу спросить совета, по поводу обширной книги по структурам данных и алгоритмам на C++. Отыскал следующие книги: 1. Организация структур данных и решение задач на С++,...
Перестановка строки. C++
#include <iostream> using namespace std; void change(char &a, char &b); void permutation(char* Str) { if(strlen(Str)%2 == 0)
C++ Объясните код программы http://www.cyberforum.ru/cpp-beginners/thread359647.html
Вот рабочий код) напротив каждой строки через 2 слеша обьясните что происходит в программе, желательно поподробнее) спасибо) #include <stdafx.h> #include <iostream> #include <algorithm> #include...
C++ Написать функцию is_equal() - поэлементное сравнение двух контейнера C++ Реализуйте следующую функцию: bool is_equa1( const int*ia, int ia_size,const vector<int> &ivec ); Функция is_equal() сравнивает поэлементно два контейнера. В случае разного размера... подробнее

Показать сообщение отдельно
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.10.2011, 11:20  [ТС]
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Вот! А в файле с определением класса - есть инклуд iostream?
Где определения методов класса? Есть. При построении следующий вывод:

1>------ Построение начато: проект: 1, Конфигурация: Debug Win32 ------
1> klass.cpp
1>d:\my c++projects\1\klass.h(10): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>d:\my c++projects\1\klass.h(10): error C2433: ostream: "friend" не разрешается для объявлений данных
1>d:\my c++projects\1\klass.h(10): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>d:\my c++projects\1\klass.h(10): error C2061: синтаксическая ошибка: идентификатор "ostream"
1>d:\my c++projects\1\klass.h(10): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>d:\my c++projects\1\klass.h(10): error C2805: бинарный "operator <<" имеет слишком мало параметров
1>d:\my c++projects\1\klass.cpp(20): error C2872: ostream: неоднозначный символ
1> может быть "d:\my c++projects\1\klass.h(10) : int ostream"
1> или "c:\program files (x86)\microsoft visual studio 10.0\vc\include\iosfwd(636) : std::ostream"
1>d:\my c++projects\1\klass.cpp(20): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>d:\my c++projects\1\klass.cpp(20): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>d:\my c++projects\1\klass.cpp(20): error C2086: int ostream: переопределение
1> d:\my c++projects\1\klass.h(10): см. объявление "ostream"
1>d:\my c++projects\1\klass.cpp(20): error C2872: ostream: неоднозначный символ
1> может быть "d:\my c++projects\1\klass.h(10) : int ostream"
1> или "c:\program files (x86)\microsoft visual studio 10.0\vc\include\iosfwd(636) : std::ostream"
1>d:\my c++projects\1\klass.cpp(20): error C2872: ostream: неоднозначный символ
1> может быть "d:\my c++projects\1\klass.h(10) : int ostream"
1> или "c:\program files (x86)\microsoft visual studio 10.0\vc\include\iosfwd(636) : std::ostream"
1>d:\my c++projects\1\klass.cpp(20): error C2065: a: необъявленный идентификатор
1>d:\my c++projects\1\klass.cpp(20): error C2059: синтаксическая ошибка: const
1>d:\my c++projects\1\klass.cpp(21): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>d:\my c++projects\1\klass.cpp(21): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1> Создание кода...
1> Компиляция...
1> 1.cpp
1> Создание кода...
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

10) строчка это в объявлении класса: friend ostream& operator<<(ostream& a, const klass& b);

В файле с определениями:
20) ostream& operator<<(ostream& a, const klass& b)
21) {
22) return (a << b.x);
23) }

Добавлено через 15 минут
Если поместить определение вместо прототипа:
10) friend ostream& operator<<(ostream& a, const klass& b)
11) {
12) return (a << b.x);
13) }

, то ошибка с недоступностью x пропадает, а при построении вывод такой:

1>------ Построение начато: проект: 1, Конфигурация: Debug Win32 ------
1> klass.cpp
1>d:\my c++projects\1\klass.h(10): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>d:\my c++projects\1\klass.h(10): error C2433: ostream: "friend" не разрешается для объявлений данных
1>d:\my c++projects\1\klass.h(10): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>d:\my c++projects\1\klass.h(10): error C2061: синтаксическая ошибка: идентификатор "ostream"
1>d:\my c++projects\1\klass.h(11): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>d:\my c++projects\1\klass.h(11): error C2805: бинарный "operator <<" имеет слишком мало параметров
1>d:\my c++projects\1\klass.h(11): error C2333: klass::operator <<: ошибка в объявлении функции; пропуск основного текста функции
1> Создание кода...
1> Компиляция...
1> 1.cpp
1> Создание кода...
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru