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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ нахождение Максимальной длины имени объекта Fat32 http://www.cyberforum.ru/cpp-beginners/thread359682.html
Прошу помощи,подсказки в решении такой вот задачки(С++Borland3.1) поиск объектов с максимальным количеством символов в имени среди объектов с длинными именами для FAT максимальное к-во-255 символов,это 20 дескрипторов по 13 симв неясно вот к примеру код LFN-0х0F,а какой код max LFN или его надо просчитывать,может кто сталкивался с подобной задачкой
C++ C++ Наследование динамического списка классом стеком. Салют форумчане. Новый курс, новые приключения. Вот и дали задание наследую динамический список создать стек. Список вроде сделал , да стек не пойму как к нему прикрутить. (Какие только велосипеды не придумают для лабораторных работ) List.h #ifndef LIST_H #define LIST_H #include <iostream> using std::cout; #include <new> #include "ListNode.h" template< typename NODETYPE > http://www.cyberforum.ru/cpp-beginners/thread359680.html
Литература по структурам данных и алгоритмам C++
Доброго Времени Суток! Хочу спросить совета, по поводу обширной книги по структурам данных и алгоритмам на C++. Отыскал следующие книги: 1. Организация структур данных и решение задач на С++, Уайс М. А. 2. Структуры и алгоритмы обработки данных: объектно-ориентированный подход и реализация на С++, А. А. Кубенский 3. Структуры и алгоритмы обработки данных. Примеры на языке Си, Б. С....
Перестановка строки. 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 <string> #include <vector> using namespace std; class Csv { // read and parse comma-separated values
C++ Написать функцию is_equal() - поэлементное сравнение двух контейнера C++ Реализуйте следующую функцию: bool is_equa1( const int*ia, int ia_size,const vector<int> &ivec ); Функция is_equal() сравнивает поэлементно два контейнера. В случае разного размера контейнеров “хвост” более длинного в расчет не принимается. Понятно, что, если все сравниваемые элементы равны, функция возвращает true, если отличается хотя бы один – false. Используйте итератор для перебора... подробнее

Показать сообщение отдельно
alsav22
5416 / 4812 / 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 ==========
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru