powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос о дружественных функциях
17 сообщений из 17, страница 1 из 1
Вопрос о дружественных функциях
    #34753288
ivan *
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Ниже код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include <iostream>
using namespace std;

class Some
{
	friend ostream& operator<<(ostream& output, const Some& some);
public:
	Some(int value) : _value(value) {}
	void setValue(int value) { _value = value; }
private:
	int _value;
};

ostream& operator<<(ostream& output, const Some& some)
{
	return output << some._value;
};

void main()
{
	Some some( 13 );
	cout << some;
}
В Borland C++ Compiler 5.5 компилится и работает без ошибок. В Visual C++ 6.0 - 2 ошибки:
error C2248: '_value' : cannot access private member declared in class 'Some' see declaration of '_value'
error C2593: 'operator <<' is ambiguous
Подскажите, кому не сложно, в чем разница.
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34753298
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivan *Привет всем!
Ниже код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include <iostream>
using namespace std;

class Some
{
	friend ostream& operator<<(ostream& output, const Some& some);
public:
	Some(int value) : _value(value) {}
	void setValue(int value) { _value = value; }
private:
	int _value;
};

ostream& operator<<(ostream& output, const Some& some)
{
	return output << some._value;
};

void main()
{
	Some some( 13 );
	cout << some;
}
В Borland C++ Compiler 5.5 компилится и работает без ошибок. В Visual C++ 6.0 - 2 ошибки:
error C2248: '_value' : cannot access private member declared in class 'Some' see declaration of '_value'
error C2593: 'operator <<' is ambiguous
Подскажите, кому не сложно, в чем разница.

7-ая студия собирает
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34753391
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivan * wrote:

> В Borland C++ Compiler 5.5 компилится и работает без ошибок. В Visual C++
> 6.0 - 2 ошибки: error C2248: '_value' : cannot access private member
> declared in class 'Some' see declaration of '_value'
Либо сделай оператор friend'ом, либо добавь инлайн-фукнцию для получения
значения _value и вызывай её в операторе.

Tubrik wrote:
> 7-ая студия собирает
Как я понимаю, по-хорошему, она делать этого не должна. operator<< к методам
класса не относитя, и доступа к приватным полям быть не должно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34753404
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV
ivan * wrote:

> В Borland C++ Compiler 5.5 компилится и работает без ошибок. В Visual C++
> 6.0 - 2 ошибки: error C2248: '_value' : cannot access private member
> declared in class 'Some' see declaration of '_value'
Либо сделай оператор friend'ом, либо добавь инлайн-фукнцию для получения
значения _value и вызывай её в операторе.

Tubrik wrote:
> 7-ая студия собирает
Как я понимаю, по-хорошему, она делать этого не должна. operator<< к методам
класса не относитя, и доступа к приватным полям быть не должно.
Posted via ActualForum NNTP Server 1.4

а сейчас она кем приходится для класса? разве не friend?? я что-то не пойму
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34753576
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ANSI ESO 2003 11.4/1 - все правильно. Студия косячит или старовата. Сделай как сказал ErV.
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34753610
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСделай как сказал ErV
авторЛибо сделай оператор friend'ом
а в примере он кто как не френд? объясините пожайлуста, что-то не догоню(
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34753683
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik wrote:

> а в примере он кто как не френд?
Гы. Проглядел.
Тогда есть смысл попробовать перенести friend в секцию private.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34753715
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он и так там Ты наверное не проснулся еще
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34753735
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik авторСделай как сказал ErV
авторЛибо сделай оператор friend'ом
а в примере он кто как не френд? объясините пожайлуста, что-то не догоню(

Он посоветовал метод доступа к свойству.
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34753889
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV пишет:
> Гы. Проглядел.
> Тогда есть смысл попробовать перенести friend в секцию private.

Бредовые -то советы не надо давать. Это все равно, где объявлен
friend. Он дает доступ ко всем членам.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34753999
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может тогда лучше без френда:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class Some
{
public:
	Some(int value) : _value(value) {}
	void setValue(int value) { _value = value; }
	const int &getValue()const { return _value; }

private:
	int _value;
};

ostream& operator<<(ostream& output, const Some& some)
{
	return output << some.getValue();
};

void main()
{
	Some some( 13 );
	cout << some;
}
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34754053
ivan *
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>может тогда лучше без френда
Это-то понятно. Вопрос в том, почему шестая студия не дает компилить код с friend. Есть, наверное, какая-то хитрость.
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34754086
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivan * Вопрос в том, почему шестая студия не дает компилить код с friend. Есть, наверное, какая-то хитрость.

Скорее всего это её видение стандарта. Хитрость заключается в написании кода на MSC++, в котором такая спецификация не поддерживается. ;)
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34756258
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv wrote:

> Бредовые -то советы не надо давать. Это все равно, где объявлен
> friend. Он дает доступ ко всем членам.

Akh wrote:
>> Вопрос в том, почему шестая студия не дает компилить код с friend. Есть,
>>наверное, какая-то хитрость.
> Скорее всего это её видение стандарта. Хитрость заключается в написании
>кода на MSC++, в котором такая спецификация не поддерживается. ;)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34756308
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivan * wrote:

> Привет всем!
> Ниже код:
Рабочий вариант:
Код: plaintext
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.
#include <iostream>

class Some
{
public:
        Some(int v) : value(v) {}
        void setValue(int v) { value = v; }
private:
        int value;
        friend std::ostream& operator<<(std::ostream& output, const Some&
some);
};

std::ostream& operator<<(std::ostream& output, const Some& some)
{
        output << some.value; return output;
};


int main(int argc, char **argv)
{
        Some some( 13 );
        std::cout << some;
        return  0 ;
}
У меня компилится CL.EXE "version 12.00.8168 for 80x86" - от 6й студии.

blinded wrote:
>Он и так там Ты наверное не проснулся еще
Я на момент написания ещё не ложился :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34756582
ivan *
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно, с std:: вместо using namespace std компилится и работает. Странно как-то это все.
...
Рейтинг: 0 / 0
Вопрос о дружественных функциях
    #34756622
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivan * wrote:

> Странно как-то это все.
ИМХО, раз работает, то и фиг с ним.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос о дружественных функциях
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]