>

삽입 연산자를 오버로드하는 클래스를 작성하려고하는데 헤더 파일에 오류가 발생합니다.

Overloaded 'operator<<' must be a binary operator (has 3 parameters)

내 코드는 다음과 같습니다 :

.h 파일

ostream & operator<<(ostream & os, Domino dom);

.cpp 파일

ostream & operator<< (ostream & os, Domino dom) {
    return os << dom.toString();
}

교과서를 따르고 있는데 이것들은 그들이 예로 사용하지만 저에게는 효과가 없습니다 .. 어떤 제안?


  • 답변 # 1

    당신은 아마도 당신의 operator<< 를 넣어  클래스 선언 내부. 그것은 여분의 숨겨진 매개 변수 ( this )가 필요하다는 것을 의미합니다.  매개 변수). 클래스 선언 외부에 배치해야합니다.

  • 답변 # 2

    삽입 연산자 (<<)는 멤버 함수 또는 친구 함수로 사용할 수 있습니다.

    연산자<<멤버 함수로 사용

    ostream& operator<<(ostream& os);
    
    

    이 함수는 다음과 같이 호출되어야합니다 :

    dom << cout;
    
    

    일반적으로 연산자를 멤버 함수로 사용하는 경우 연산자의 왼쪽은 객체 여야합니다. 그런 다음이 객체는 암시 적으로 멤버 함수에 인수로 전달됩니다. 그러나 호출은 사용자를 혼란스럽게하며 멋지게 보이지 않습니다.

    운영자<<친구 기능으로 사용

    friend ostream& operator<<(ostream& os, const Domino& obj);
    
    

    이 함수는 다음과 같이 호출되어야합니다 :

    cout << dom;
    
    
    이 경우 객체 dom  명시 적으로 참조로 전달됩니다. 이 호출은 더 전통적이며 사용자는 코드의 의미를 쉽게 이해할 수 있습니다.

  • 답변 # 3

    /*insertion and extraction overloading*/
    #include<iostream>
    using namespace std;
    class complex
    {
       int real,imag;
    public:
        complex()
        {
          real=0;imag=0;
        }
        complex(int real,int imag)
        {
            this->real=real;
            this->imag=imag;
        }
        void setreal(int real)
        { 
            this->real=real; 
        }
        int getreal()
        {
           return real;
        }
        void setimag(int imag)
        { 
            this->imag=imag; 
        }
        int getimag()
        {
           return imag;
        }
        void display()
         {
          cout<<real<<"+"<<imag<<"i"<<endl;
         }
    };//end of complex class
     istream & operator >>(istream & in,complex &c)
         {
             int temp;
             in>>temp;
             c.setreal(temp);
             in>>temp;
             c.setimag(temp);
             return in;
         }
     ostream &operator <<(ostream &out,complex &c)
     {
         out<<c.getreal()<<c.getimag()<<endl;
         return out;
     }
    int main()
    {
      complex c1;
      cin>>c1;
     // c1.display();
      cout<<c1;
      //c1.display();
      return 0;
    }
    
    

  • 이전 Azure AD B2C Open ID 연결 대 OAuth 20
  • 다음 python - 이미지의 최소 및 최대 찾기