2014-09-11 4 views
-2
class complex1 
{ 
    public: 
     int real,img; 
     complex1(){} 
     complex1(int a) 
     { 
      real=a; 
      img=a; 
     } 
     complex1(int a,int b) 
     { 
      real=a; 
      img=b; 
     } 

     complex1 sum(int x,complex1 y); 
     complex1 sum(complex1,complex1); 
     complex1 display(complex1); 
}; 

complex1 complex1::sum(int x,complex1 y) 
{ 
    complex1 num; 
    num.real=x+y.real; 
    num.img=y.img; 
    return num; 
} 

complex1 complex1::sum(complex1 a,complex1 b) 
{ 
    complex1 num; 
    num.real=a.real+b.real; 
    num.img=a.img+b.img; 
    return num; 

} 

complex1 complex1::display(complex1 c) 
{ 
    cout<<"The complex number is:\n"; 
    cout<<c.real<<"+i"<<c.img; 
} 

main() 
{ 
    complex1 p,q,r,s; 
    p=complex1(2,4); 
    q=complex1 (3,5); 


    cout<<"\n"; 
    cout<<"p="<<display(p); 
    cout<<"q="<<display(q); 
} 

생성자를 사용하여 두 개의 복소수를 추가해야합니다. 오류가 발생합니다.복소수 코드 추가

Error: display was not declared in this scope.

제안 사항? 나는 어디가 잘못 됐어?

+0

안녕하세요. SO! 귀하의 질문은 아마도 [MCVE] (http://stackoverflow.com/help/mcve)가 없기 때문에 닫힐 것입니다. 또한 질문을 게시하기 전에 수행해야하는 연구 노력에 대한 설명이 부족합니다. –

+2

아마도 도움이되지는 않지만'std :: complex'는 당신이 원하는 모든 것을 할 것입니다. 즉,'display'는'complex1'의 멤버입니다. 이것은 잘못 된 것을 암시해야합니다. – icabod

답변

1

이 오류 때문에지고있다 : 당신은 대신 sum 기능을 사용하여, 당신은 모두 int 's 및 기타 complex1 년대의 + 연산자를 오버로드 할 수있다, 또한

p.display(); 

을 할 필요가 complex1 인스턴스에서 호출하지 않고 display()을 인스턴스 메서드 구현 외부에서 호출하므로 컴파일러는 해당 인스턴스를 찾을 수있는 위치를 알 수 없습니다.

p.display(p)과 같이 입력해야합니다.

그러나, 당신은 여기에 몇 가지 더 심각한 오류가 :

  1. sum()display() 방법 this으로 아무것도하지 않고, 그래서 그들은 정적 메서드처럼 행동하지만 여전히 인스턴스를 필요로한다. 이것은 혼란 스럽다. 정적으로 만듭니다. 합니다 (sum()있어서 아마 어쨌든 + 연산자 과부하로 구현되어야한다.)

  2. display()있어서 아마 왼쪽 피연산자로서 std::ofstream& 복용하는 << 연산자 과부하로 구현되어야하며, 그 대신 std::ofstream& 반환해야 complex1 개체. 예를 들어,

(그리고 구현에조차.이 오류가 발생합니다. 그것이로 선언에도 불구하고, 전혀 complex1 객체를 반환하지 않습니다) 나는 sum()을 제거 할 첫 번째 점을 해결하기 위해 방법은 모두이 같은 무료 운영자, 뭔가 함께 할 것입니다 : 당신의 complex1(int) 생성자부터

complex1 operator+(complex1 const & a, complex1 const & b) 
{ 
    return complex1(a.real + b.real, a.img + b.img); 
} 

암시 적으로 암시 적 (HAH!)이 연산자가 자동으로 complex1 + complex1, complex1 + intint + complex1 작업 할 수 있습니다. (그러나 귀하의 complex1(int) 생성자는 realimg에 인수를 할당하는데 이는 버그 일 가능성이 높으므로 img을 0으로 초기화하고 싶을 것입니다.출력에, 당신은 같은 것을 할 수있는 다수의

std::ofstream & operator<<(std::ofstream & s, complex1 const & c) 
{ 
    return s << c.real << "+i" << c.img; 
} 

다음 :

를, 이런 식으로 뭔가를)

두 번째 문제를 해결하려면, 나는 전적으로 당신의 display() 방법을 제거하는 것입니다 무료 연산자로 이동

std::cout << "p=" << p; 
0

display 함수는 클래스에서 말한 것처럼 complex1 객체를 반환해야합니다. 그렇지 않으면, 당신은 또한

void display(complex1); 

에 스텁을 변경할 수 display는 클래스 인스턴스에서 호출 할 필요가 의미하는 멤버 함수입니다.

complex1 operator+(const complex1 &c1, const complex1 &c2);