[완료]연산자 오버로딩중에 자꾸 에러가 생깁니다.
글쓴이: rjaechang / 작성시간: 월, 2007/09/24 - 6:59오후
error C2593: 'operator <<' is ambiguous이런 에러입니다.
뭐가 모호하다는건지 잘 감이 안오네요..
그리고 오버로딩함수 정의부분에서 클래스 내부에서 friend로 선언을 했는데도
private인 부분을 왜 사용할 수 없는지 궁금합니다.
함수를 호출하는 메인부분 소스입니다.
#include "Polynomi.h" int main() { Polynomial P1; Polynomial P2; Polynomial Result; int n; P1.Input(); P2.Input(); //P1.Add(P2); P1.Mul(P2); cout << P1; <-- 여기에서 에러!! cout << "x의 값을 입력하세요 : "; cin >> n; cout << Result.Answer(P2.Size, n) << endl; return 0; }
클래스 헤더부분입니다.
#include <iostream> using namespace std; class Polynomial; class term{ friend Polynomial; public: float coef; int exp; }; class Polynomial{ public : int Size; Polynomial(int size = 0); ~Polynomial(); friend ostream& operator << (ostream& os, const Polynomial &P); int Input(); int Add(Polynomial P2); int Mul(Polynomial P2); int Answer(int size, int n); static term* TermArray; <-- 요기로 옮김 private : static int Maxpoly; //static term* TermArray; <-- 사용이 안되어서 위쪽으로 옮김 static int TermCount; int doubleExten(); term* SingleMul(Polynomial P2, int counter); term* Add(term* temp1, term* temp2); }; ostream& operator << (ostream& os, const Polynomial &P) { int i; os << "입력된 다항식은 : "; for(i=0; i<P.Size; i++){ os << P.TermArray[i].coef << "x" << P.TermArray[i].exp << "+"; } os << endl; return os; }
Forums:
제가 vs2005 와 g++ 에서
제가 vs2005 와 g++ 에서 test 해본 결과 매우 잘 컴파일 됩니다.
혹시 static member 의 초기화를 외부에서 해주시는 것을 빼먹은 건 아닌가 궁금하군요.
문법상 특별히 문제는 없어 보입니다.
더불어 private 으로 TermArray 를 선언해도 잘 되었습니다.
Neogeo - Future is Now.
Neogeo - Future is Now.
ostream& operator <<
지금 컴파일해볼 환경이 안되서 확인은 못하겠지만, <<연산자 오버로드한게 ostream& operator << (ostream& os, const Polynomial &P)와 ostream& Polynomial::operator << (ostream& os, const Polynomial &P) 두가지가 있으니 어느쪽을 호출해야 할지 결정할 수 없다는 것 아닌가요?
Polynomial 내의
Polynomial 내의 선언이
friend ostream& operator << (ostream& os, const Polynomial &P);
이므로 friend 선언일뿐 Polynomial:operator << 가 오버로딩 되기 위해 선언된것은 아닙니다.
정확히는 std::operator << 가 오버로딩 된 것 이지요.
Neogeo - Future is Now.
Neogeo - Future is Now.
ostream& operator <<
ostream& operator << (ostream& os, const Polynomial &P) 의 friend 선언이 나오기 전에 이 함수의 선언이 있어야 하는 것 아닌가요?
아.. 오버로딩 구현 소스 내용이..
오버로딩을 구현한 소스의 내용이 헤더파일에 들어가 있던게 문제였네요.. CPP파일에 넣었어야 하는데...ㅋ
큭 수정요. private는 VC의 문제라고 합니다 ㅋ
어쨌든 도와주셔서 감사합니다!^^!!
(~`0`)~
댓글 달기