2012-11-21 4 views
0

차 객체에서 정보를 출력하기 위해 참조 매개 변수를 사용하는 비 클래스 멤버 오버로드 put 연산자가 필요합니다. 내가 매개 변수로 자동차를 가질 수없는 건가요 나는 std::ostream& Car::operator<<(std::ostream&, Car&)' must take exactly one argument 오류삽입 연산자에 대한 비 멤버 함수 형식

을 얻을

ostream& operator<<(ostream& os, Car& p) 
{ 
     os << "For a car make " << p.get_make() << ", " << p.get_year()<< ", the price is $" << p.get_price() << endl; 
     return os; 
} 

: 여기

내 코드?

감사합니다.

+0

클래스의 친구로 함수를 선언하면됩니다 (예 : Car 클래스) – rajesh6115

답변

2

비회원 인 연산자를 정의하고자한다고하셨습니다. 그러나 연산자 정의를 클래스 정의 내에 두었으므로 컴파일러에서 멤버 (이 연산자의 멤버 구현에는 하나의 매개 변수 만 있어야하므로 오류 메시지)으로 처리합니다. 멤버가 아닌 연산자를 정의하려면 클래스 정의 외부로 이동하거나 friend (또는 둘 다)로 선언하십시오.

+0

관계 란 무엇입니까? ostream 멤버 삽입 연산자와 비 멤버 과부하 사이에? 내가 "std :: cout << car"라고 쓸 때, 어느 것이 호출 될까? – h9uest

+0

@ h9uest : 어떤 멤버에 대해 이야기하고 있습니까? 'ostream'에는'Car' 타입의 멤버 연산자가 없습니다. 'ostream'은 표준 라이브러리 클래스입니다. 그것은 사용자가 정의한'Car' 타입에 대해서는 아무 것도 모르고 있으며, 아마도 그것을 위해 과부하가있을 수 없습니다. – AnT

+0

안녕 AnT, 나는 여기에 더 나은 질문을 공식화 : http : //stackoverflow.com/questions/29306185/relation-between-ostream-insertion-operator-and-its-non-member-overload – h9uest

관련 문제