다음과 같은 (컷 다운) 클래스 정의가 있으며 컴파일 오류가 있습니다.C++ friend 연산자 오버로드가 컴파일되지 않습니다.
#include <iostream>
#include <string>
class number
{
public:
friend std::ostream &operator << (std::ostream &s, const number &num);
friend std::string &operator << (std::string, const number &num);
friend std::istream &operator >> (std::istream &s, number &num);
friend std::string &operator >> (std::string, number &num);
protected:
private:
void write ( std::ostream &output_target = std::cout) const;
void read ( std::istream &input_source = std::cin);
void to_string ( std::string &number_text) const;
void to_number (const std::string &number_text);
};
std::istream & operator >> (std::istream &s, number &num)
{
num.read (s);
return s;
}
std::string & operator >> (std::string &s, number &num)
{
num.to_number (s);
return s;
}
std::string & operator << (std::string &s, const number &num)
{
num.to_string (s);
return s;
}
std::ostream & operator << (std::ostream &s, const number &num)
{
num.write (s);
return s;
}
내가 컴파일 할 때, 나는 다음과 같은 오류를 얻을 ...
사람이 도움을 수frag.cpp: In function ‘std::string& operator>>(std::string&, number&)’:
frag.cpp:17: error: ‘void number::to_number(const std::string&)’ is private
frag.cpp:27: error: within this context
frag.cpp: In function ‘std::string& operator<<(std::string&, const number&)’:
frag.cpp:16: error: ‘void number::to_string(std::string&) const’ is private
frag.cpp:32: error: within this context
; 특히 to_number와 to_string이 비공개로 생각되지만 읽거나 쓰는 것이 괜찮은 이유는 무엇입니까?
감사합니다.
귀하의 도움에 감사드립니다. 머리/벽돌 벽 인터페이스에서 약간의 타박상이 발생했습니다. –