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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
tas
0 / 0 / 0
Регистрация: 03.07.2009
Сообщений: 4
#1

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

03.07.2009, 14:40. Просмотров 2437. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2009, 14:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос friend функция С++ на MSVC 6.0 (C++):

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

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

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

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

friend функция в пространстве имен - C++
class Particle{ friend bool FileManager::Particles(const char* FileName, void* Target); /* etc */ } Ругается что &quot;error C2039:...

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

9
Vourhey
Почетный модератор
6489 / 2263 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
03.07.2009, 14:58 #2
смотри внимательно на имя члена класса, как объявлен и как ты к нему обращаешься:
bootles;
и
bottles;
1
tas
0 / 0 / 0
Регистрация: 03.07.2009
Сообщений: 4
03.07.2009, 15:03  [ТС] #3
спасибо! НО это оказалось опечатка(а так хотелось чтобы в этом была проблема) в коде (в студии) всё соответствует.так что ещё варианты?
0
Vourhey
Почетный модератор
6489 / 2263 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
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
CyBOSSeR
Эксперт С++
2308 / 1681 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
03.07.2009, 15:13 #5
Только что проверил, все работает.
Ты уверен, что дело именно в операторе << ?
Покажи весь код, возможно ошибка в другом месте.
0
tas
0 / 0 / 0
Регистрация: 03.07.2009
Сообщений: 4
03.07.2009, 15:16  [ТС] #6
О!
Твой код компилируеться... (понятно что надо ещё в начале вставить #include <iostream>).
Получаеться что у меня не компилируеться, если всесто std::ostream использовать просто ostream и вначале using namespace std;.

может кто-то объяснить мне почему?
0
CyBOSSeR
Эксперт С++
2308 / 1681 / 86
Регистрация: 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
Vourhey
Почетный модератор
6489 / 2263 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
03.07.2009, 15:21 #8
CyBOSSeR прав. Он и с using namespace должен компилиться.
0
tas
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
Vourhey
Почетный модератор
6489 / 2263 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
03.07.2009, 15:33 #10
Мистика какая-то...
tas, вообщем, либо поставь сервис-пак на свою студию, либо попробуй еще подключить:
#include <ostream>
1
03.07.2009, 15:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2009, 15:33
Привет! Вот еще темы с ответами:

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

Friend для friend - C++
всем доброго времени суток, покажу проблему на примере: Class B; class A{ int F; friend B; public: A(){F=0;}; };

Qt Creator or MSVC - C++
Доброе утро. У меня вопрос, не хочу холивара, но стоит выбор между этими двумя IDE. То что qt кроссплатформенна - это я знаю, то что...

Ошибки в MSVC - C++
Пишу курсовой в котором используются некоторые функции windows.h для работы с консолью. Недавно совершенно рабочий ранее код начал выдавать...


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

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

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