Невозможно получить доступ к частной функции

 //**** Build of configuration Debug for project Calculator ****

**** Internal Builder is used for build               ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o src\Calculator.o ..\src\Calculator.cpp
..\src\/Calculator.h: In function 'std::ostream& operator<<(std::ostream&, CComplex)':
..\src\/Calculator.h:38:9: error: 'float CComplex::m_imaginary' is private
..\src\Calculator.cpp:79:8: error: within this context
..\src\/Calculator.h:37:9: error: 'float CComplex::m_real' is private
..\src\Calculator.cpp:81:12: error: within this context
..\src\/Calculator.h:38:9: error: 'float CComplex::m_imaginary' is private
..\src\Calculator.cpp:81:31: error: within this context
..\src\/Calculator.h:37:9: error: 'float CComplex::m_real' is private
..\src\Calculator.cpp:85:12: error: within this context
..\src\/Calculator.h:38:9: error: 'float CComplex::m_imaginary' is private
..\src\Calculator.cpp:85:31: error: within this context
Build error occurred, build is stopped
Time consumed: 687  ms.

Может кто-нибудь помочь мне — я пытаюсь получить доступ к частной функции, которая не принимает доступ.

0

Решение

Ну, если бы это было иначе, тогда это был бы отличный вопрос.


При указании списка членов класса личное ключевое слово указывает
что эти члены доступны только из функций-членов и
друзья класса. Это относится ко всем членам, объявленным до
следующий спецификатор доступа или конец класса.

Функция-член недоступна, потому что вы пытаетесь получить к ней доступ из-за пределов класса. Как указано выше, ключевое слово private используется для предотвращения именно этого.

Если вам нужен доступ извне класса, вам нужно сделать его публичным методом, используя ключевое слово public.

Смотрите здесь для некоторые примеры и объяснения в отношении частного ключевого слова.


Глядя на ваши ошибки, я думаю, что проблема заключается в вашей перегрузке оператора<< ,
Оператор может быть перегружен только как функция друга, которая сама по себе должна решить вашу проблему.

friend std::ostream& operator<<(std::ostream&, CComplex);

2

Другие решения

Вы, вероятно, хотите сделать operator<< друг CComplex учебный класс. Что-то вроде этого:

class CComplex {
...
// It doesn't matter whether this declaration is on a private,
// public or protected section of the class. The friend function
// will always have access to the private data of the class.
friend std::ostream& operator<<(std::ostream&, CComplex);
};
1

По вопросам рекламы [email protected]