[완료]연산자 오버로딩중에 자꾸 에러가 생깁니다.
글쓴이: 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`)~
댓글 달기