Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 03.07.2009
Сообщений: 4
1

friend функция С++ на MSVC 6.0

03.07.2009, 14:40. Показов 2622. Ответов 9
Метки нет (Все метки)

Переписал из книги С. Прата такое :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Port 
{
private:
int bootles;
.......
public:
.......
friend ostream & operator<<(ostream & os, const Port & p);
};
 
ostream & operator<<(ostream & os, const Port & p)
{
os << p.bottles;
return os;
}
А MSVC 6.0 при компиляции выдаёт:
error C2248: 'bottles' : cannot access private member declared in class 'Port'
...\port.h(10) : see declaration of 'bottles'


для вижлстудии ДРУГ ничего не значит?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.07.2009, 14:40
Ответы с готовыми решениями:

Перегрузка операций: friend-функция или функция-член класса
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и...

Не работает friend функция
Помогите разобраться почему не присваивается значение объекту из main() через setx и sety. Не...

Friend функция вывода
Есть класс vector.h, есть vector.cpp,вот он: using namespace std; void vector::add(const int...

Шаблонная функция msvc vs mingw
Всем привет. Сначала думал разместить код в раздел Qt, но кажется дело тут в различии реализаций...

9
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
03.07.2009, 14:58 2
смотри внимательно на имя члена класса, как объявлен и как ты к нему обращаешься:
bootles;
и
bottles;
1
0 / 0 / 0
Регистрация: 03.07.2009
Сообщений: 4
03.07.2009, 15:03  [ТС] 3
спасибо! НО это оказалось опечатка(а так хотелось чтобы в этом была проблема) в коде (в студии) всё соответствует.так что ещё варианты?
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
03.07.2009, 15:08 4
Хочешь сказать, что вот такой код студия не скомпилит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Port
{
private:
int bottles;
public:
friend std::ostream &operator<<(std::ostream & os, const Port & p);
};
 
std::ostream &operator<<(std::ostream & os, const Port & p)
{
os << p.bottles;
return os;
}
1
Эксперт С++
2337 / 1710 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
03.07.2009, 15:13 5
Только что проверил, все работает.
Ты уверен, что дело именно в операторе << ?
Покажи весь код, возможно ошибка в другом месте.
0
0 / 0 / 0
Регистрация: 03.07.2009
Сообщений: 4
03.07.2009, 15:16  [ТС] 6
О!
Твой код компилируеться... (понятно что надо ещё в начале вставить #include <iostream>).
Получаеться что у меня не компилируеться, если всесто std::ostream использовать просто ostream и вначале using namespace std;.

может кто-то объяснить мне почему?
0
Эксперт С++
2337 / 1710 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
03.07.2009, 15:19 7
C++
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
26
#include <iostream>
 
using namespace std;
 
class Port 
{
private:
  int bootles;
 
  friend ostream& operator<<(ostream& os, const Port & p);
};
 
ostream & operator<<(ostream & os, const Port & p)
{
  os << p.bootles;
  return os;
}
 
int main()
{
  Port port;
 
  cout << port;
 
  return 0;
}
Этот код компилится без проблем, дело в чем-то другом.
Может все таки покажешь ВЕСЬ код?
1
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
03.07.2009, 15:21 8
CyBOSSeR прав. Он и с using namespace должен компилиться.
0
0 / 0 / 0
Регистрация: 03.07.2009
Сообщений: 4
03.07.2009, 15:24  [ТС] 9
CyBOSSeR, да это и есть почти весь код

так. значит просто взял и скопировал ТВОЙ код полностью:

error C2248: 'bootles' : cannot access private member declared in class 'Port'
....\main.cpp(8) : see declaration of 'bootles'
....\main.cpp(23) : error C2593: 'operator <<' is ambiguous
Error executing cl.exe.

как жить дальше??????????????????
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
03.07.2009, 15:33 10
Мистика какая-то...
tas, вообщем, либо поставь сервис-пак на свою студию, либо попробуй еще подключить:
#include <ostream>
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.07.2009, 15:33

Помощь в написании контрольных, курсовых и дипломных работ здесь.

friend функция в пространстве имен
class Particle{ friend bool FileManager::Particles(const char* FileName, void* Target); /* etc...

Почему в MSVC++ 2008 компилируется, а в MSVC++ 2010 вылезает много ошибок?
Кстати, перед запуском в 2010 предлагает конвертировать код. Ну а чем эти две студии отличаются,...

Перегрузка операторов, friend или нет friend?
Всем здравствуйте. Есть такой вопрос: при перегрузке операторов в классе(пусть будут + и = (вообще...

Friend для friend
всем доброго времени суток, покажу проблему на примере: Class B; class A{ int F; friend B;...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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