Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
MMt
0 / 0 / 6
Регистрация: 29.04.2014
Сообщений: 176
#1

Не могу обратиться к Privat члену класса из ф-и Friend. Почему? - C++

07.12.2014, 15:05. Просмотров 288. Ответов 3
Метки нет (Все метки)

не нашел ответ на свой вопрос...
есть класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Product
{
    char    cmName[sz_name],
            cmType[sz_name];
    double  cmPriceIn,
            cmPriceOut;
    str_Date    cmStrDateBuy,
                cmStrDateOut,
                cmStrDateFact;
    int     * cmItemAmount;
public:
    Product();
    friend void TestProdConstruct(const Product *);
    //~Product();
};
надо из функции друга, считывать/записываться данные в приват члены класа.
что уже не перепробовал. ругаеться... Вот одни из моих способов решения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void TestProdConstruct(const Product & X)
{
    cout << X.cmItemAmount; 
};
// НЕ РАБОТАЕТ
//void Product::TestProdConstruct(Product pProduct)
//{ 
//  cout    << pProduct.cmItemAmount;
//   
//  /*cout  << Product.cmName;
//  cout    << Product.cmPriceIn;
//  cout    << Product.cmPriceOut;
//  cout    << Product.cmType;*/
//};
не пойму в чем проблема. ведь тут все просто. Дружественный функции могу работать с приват членами класса.
значит ошибка в синтаксиссе кода?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2014, 15:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не могу обратиться к Privat члену класса из ф-и Friend. Почему? (C++):

Как обратиться к члену класса
Здравствуйте! Есть такой код: class ClassA { ... public: int t; }; ...

Почему сын может спокойно работать с полями privat отцовского класса (опять template <class T> воду мутит!)
Сабж class otets { public: otets (){}; private: int znach; }; ...

Не могу получить доступ к члену класса
Прошу сильно не пинать - только начинаю изучение ООП. Собственно пишу морской...

Не могу получить доступ к члену класса
Недавно начал изучать C++ и SDL и появилась проблема с кодом. Я могу создать...

friend функции не имеют доступа к private элементам класса, почему?
Учусь по Лафоре Р. - Объектно-ориентированное программирование в С++ (Классика...

Невозможно обратиться к private -члену
Подскажите пожалуйста,в чем проблема, из-за создания объекта компилятор выдает...

3
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
07.12.2014, 15:09 #2
Лучший ответ Сообщение было отмечено MMt как решение

Решение

Цитата Сообщение от MMt Посмотреть сообщение
void TestProdConstruct(const Product & X)
Цитата Сообщение от MMt Посмотреть сообщение
void TestProdConstruct(const Product *);
Разницу видишь?
Сигнатурки-то должны быть одинаковы.
Замени на:
C++
1
friend void TestProdConstruct(const Product &);
То, что помечено "НЕ РАБОТАЕТ", работать и не должно, дружественная функция не относится к области видимости того класса, в котором декларирована.
1
MMt
0 / 0 / 6
Регистрация: 29.04.2014
Сообщений: 176
07.12.2014, 15:41  [ТС] #3
так.
Теперь осталось понять почему у меня не работало.
Спасибо)

Добавлено через 15 минут
все равно чтото не так.
ПРограмма работает, но! Компилятор подчеркивает код ипишет что член класа недоступен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Product
{
    char        cmName[sz_name],
                cmType[sz_name];
    double      cmPriceIn,
                cmPriceOut;
    str_Date    cmStrDateBuy,
                cmStrDateOut,
                cmStrDateFact;
    int         cmItemAmount;
public:
    Product();
    friend void TestProdConstruct(const Product & X);
    //~Product();
};
C++
1
2
3
4
5
6
void TestProdConstruct(const Product & X)
{
    cout    << "Product: "  << X.cmType     <<"\nName: " << X.cmName << endl;
    cout    << "PriceIn: "  << X.cmPriceIn  << endl;
    cout    << "PriceOut: " << X.cmPriceOut << endl;
};
в чем прикол? Ошибок или предупреждений нет. Только сам код подчеркивает...

Добавлено через 4 минуты
ВОзможно это непонятки с компилятором у меня... Ладно думаю на это можно не обращать внимания.
0
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
07.12.2014, 15:49 #4
Цитата Сообщение от MMt Посмотреть сообщение
Только сам код подчеркивает...
Подчеркивает не компилятор, а IDE. Видимо не разумеет она, что функция френдовая.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2014, 15:49
Привет! Вот еще темы с решениями:

Не могу обратиться к методу класса в функции
Добрый день. При написании программы возникла проблема - в функции не могу...

Почему дружественная функция не может обратиться к protected полю класса?
Не могу понять, почему функция не может обратиться к protected полю класса:...

Ошибки в коде с вложеными классами: Невозможно обратиться к private члену
Здорова! Есть код: #include &lt;iostream&gt; using std::cout; #include...

Friend класса
#include &lt;iostream&gt; class assoc { struct pair { char* name; int...


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

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

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