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

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

Войти
Регистрация
Восстановить пароль
 
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
#1

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

07.12.2014, 15:05. Просмотров 244. Ответов 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++):

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

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

Не могу получить доступ к члену класса - C++
Прошу сильно не пинать - только начинаю изучение ООП. Собственно пишу морской бой. Описал класс &quot;Kreiser&quot; - объект, который содержит в...

Не могу получить доступ к члену класса - C++
Недавно начал изучать C++ и SDL и появилась проблема с кодом. Я могу создать поверхность(см. код) с помощь thisFunctionWoks, но не могу...

friend функции не имеют доступа к private элементам класса, почему? - C++
Учусь по Лафоре Р. - Объектно-ориентированное программирование в С++ (Классика Computer Science) - 2004. Выполняю задания на Microsoft...

Невозможно обратиться к private -члену - C++
Подскажите пожалуйста,в чем проблема, из-за создания объекта компилятор выдает ошибку. Класс Base-абстрактный #include &quot;stdafx.h&quot; ...

3
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
07.12.2014, 15:09 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от MMt Посмотреть сообщение
void TestProdConstruct(const Product & X)
Цитата Сообщение от MMt Посмотреть сообщение
void TestProdConstruct(const Product *);
Разницу видишь?
Сигнатурки-то должны быть одинаковы.
Замени на:
C++
1
friend void TestProdConstruct(const Product &);
То, что помечено "НЕ РАБОТАЕТ", работать и не должно, дружественная функция не относится к области видимости того класса, в котором декларирована.
1
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 169
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
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
07.12.2014, 15:49 #4
Цитата Сообщение от MMt Посмотреть сообщение
Только сам код подчеркивает...
Подчеркивает не компилятор, а IDE. Видимо не разумеет она, что функция френдовая.
1
07.12.2014, 15:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2014, 15:49
Привет! Вот еще темы с ответами:

Не могу обратиться к методу класса в функции - C++
Добрый день. При написании программы возникла проблема - в функции не могу обратиться к методу класса: компилятор выдаёт ошибку &quot;passing...

Почему дружественная функция не может обратиться к protected полю класса? - C++
Не могу понять, почему функция не может обратиться к protected полю класса: class Ships { protected: int hits; int ships; ...

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

Friend класса - C++
#include &lt;iostream&gt; class assoc { struct pair { char* name; int val; }; int free;


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

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

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