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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
#1

Друзья класса - C++

12.02.2013, 15:40. Просмотров 729. Ответов 9
Метки нет (Все метки)

В классе объявлены такие прототипы
C++
1
2
friend ostream &operator<< (ostream &, const Complex &);
friend istream &operator>> (istream &, Complex &);
и private поля
C++
1
2
double real;
double imaginary;
Но когда я начинаю писать метод

C++
1
2
3
4
5
ostream &operator<< (ostream &output, const Complex &ourNum)
{
    output << '(' << ourNum.real << ',' << ourNum.imaginary << ')' << endl;
    return output;
}
то пишет, что real и imaginary не доступно. Но ведь функции объявлены как друзья
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2013, 15:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Друзья класса (C++):

Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать? - C++
Скажу сразу, а то сейчас начнется, что я прекрасно понимаю, что поля класса при объявлении инициализировать нельзя. Можно конструктором при...

Друзья класса. - C++
Добрый вечер, знатоки! Прошу вашей помощи, вроде бы ничего сложного, запутался в указателях. Итак, постановка задачи: Есть 2 класса:...

Друзья класса - C++
Задание на друзей класса: Vect a1(3,5), a2(4), a3(3), a4; a1.prn(); // 5 6 7 a2.prn(); // 0 0 0 0 a3.prn(); // 0 0 0 ...

Друзья шаблонного класса. Использование вложенной в класс структуры - C++
Всем привет! Изучаю книгу &quot;Прата С. - Язык программирования С++. Лекции и упражнения&quot;. Разобрал тему шаблоны классов и в заданиях для...

Классы-друзья (использование данных одного класса из другого) - C++
Зарание спс ))) Я лаймер в С++ но учусь чтоб исправиться. И куда как не к вам обращаться за помощью =) в тяжкие дни свои. Проблема с...

Функции друзья и классы друзья - C++
Пробую разбираться с друзьями в С++(друзьями -классами и друзьями функциями). Казалось бы все просто: класс/функция описанные в классе с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Модератор
Эксперт CЭксперт С++
13154 / 7417 / 831
Регистрация: 27.09.2012
Сообщений: 18,254
Записей в блоге: 3
Завершенные тесты: 1
12.02.2013, 16:03 #2
копипаст:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Complex{
private:
    friend ostream &operator<< (ostream &, const Complex &);
friend istream &operator>> (istream &, Complex &);
double real;
double imaginary;
};
 
ostream &operator<< (ostream &output, const Complex &ourNum)
{
    output << '(' << ourNum.real << ',' << ourNum.imaginary << ')' << endl;
    return output;
}
все работает. Ищите ошибку!!!
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
12.02.2013, 16:10  [ТС] #3
Вот полный код, очень похож на ваш, но не работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma once
class Complex
{
    friend ostream &operator<< (ostream &, const Complex &);
    friend istream &operator>> (istream &, Complex &);
public:
    Complex(double = 0.0, double = 0.0);
    Complex operator+(const Complex &) const;
    Complex operator-(const Complex &) const;
    Complex operator*(const Complex &) const;
    Complex &operator=(const Complex &);
    void print() const;
    ~Complex(void);
private:
    double real;
    double imaginary;
};
 
ostream &operator<< (ostream &output, const Complex &ourNum)
{
    output << '(' << ourNum.real << ',' << ourNum.imaginary << ')' << endl;
    return output;
}
Добавлено через 4 минуты
Кстати, скопипастил ваш код, точно также подчеркивает красным real и imaginary. Просто компилятор может не сразу отреагировать, у меня после копипасты секунды 2-3 ещё всё нормально.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
12.02.2013, 16:25 #4
Сдается мне, вы говорите о чем-то навроде IntelliSense?
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
12.02.2013, 17:17  [ТС] #5
Без понятия о чем вы вообще говорите.

Добавлено через 44 минуты
Ну, я уже даже отдельно создал несколько раз, предоставленный модератором код не компилируется, так как части real и imaginary не доступны.
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
12.02.2013, 18:10 #6
kebal, только что вставил твой код себе в VS2012, у меня всё норм. (real и imaginary доступны.) Выложи весь код программы.
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
12.02.2013, 18:12 #7
Цитата Сообщение от SeregaC++ Посмотреть сообщение
а зачемь ты операторы ввода и вывода сделал приватными?
спецификаторы доступа не действуют на дружественные функции
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
12.02.2013, 18:26  [ТС] #8
Та даже вот такой банальный пример не компилирует
Файл Complex.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include "Complex.h"
#include <iostream>
using namespace std;
 
Complex::Complex(void)
{
}
 
 
Complex::~Complex(void)
{
}
А вот файл Complex.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
 
class Complex{
    Complex();
    ~Complex();
private:
friend ostream &operator<< (ostream &, const Complex &);
friend istream &operator>> (istream &, Complex &);
double real;
double imaginary;
};
 
ostream &operator<< (ostream &output, const Complex &ourNum)
{
    output << '(' << ourNum.real << ',' << ourNum.imaginary << ')' << endl;
    return output;
}
Добавлено через 1 минуту
А вот что выдает сам компилятор при построении решения
1>------ Построение начато: проект: new, Конфигурация: Debug Win32 ------
1> stdafx.cpp
1> new.cpp
1> Complex.cpp
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(7): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(7): error C2433: ostream: "friend" не разрешается для объявлений данных
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(7): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(7): error C2061: синтаксическая ошибка: идентификатор "ostream"
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(7): error C2805: бинарный "operator <<" имеет слишком мало параметров
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(8): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(8): error C2433: istream: "friend" не разрешается для объявлений данных
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(8): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(8): error C2061: синтаксическая ошибка: идентификатор "istream"
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(8): error C2805: бинарный "operator >>" имеет слишком мало параметров
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(13): error C2143: синтаксическая ошибка: отсутствие ";" перед "&"
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(13): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(13): error C2086: int ostream: переопределение
1> c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(7): см. объявление "ostream"
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(13): error C2065: output: необъявленный идентификатор
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(13): error C2059: синтаксическая ошибка: const
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(14): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\users\admin\documents\visual studio 2012\projects\new\new\complex.h(14): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1> Создание кода...
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
12.02.2013, 18:35 #9
подключи хотя бы в .h файл библиотеки.
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
12.02.2013, 18:42  [ТС] #10
Это фейл. Понятно Я думал, что оно распространяется из .cpp
ужас просто, такую глупость допустить Просто обычно если не из библиотеки, то оно подсвечивается красным, вот я никак и не подумал, что в этом дело, новичок...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2013, 18:42
Привет! Вот еще темы с ответами:

Символьные массивы и их друзья - C++
Доброе время суток. Сразу хочу оговориться, что задача, условие которой я напишу далее, не связана с заданием в институте - я делаю это...

Друзья, я нуждаюсь в советах - C++
Здравствуйте Друзья, я нуждаюсь в советах. Мне было всегда интересно. Вот как же программисты создают разные сложные программы,...

друзья помогите пожалуйста с задачками)) - C++
Перенесено из раздела CyberBlogger.ru Друзья, помогите пожалуйста с задачками )) в одномерном массиве, состоящем из n вещественных...

подскажите новичку добрые друзья( - C++
всем ПРИВЕТ =) ребята хотел у вас спросить, с чего надо начинать, что бы понимать программировании, проста с задачам который мне надо было...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.02.2013, 18:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru