클래스 C ++에서 + 연산자를 오버로드 할 수 없습니다.

ZachSal

더하기 연산자를 오버로드하려고합니다.

#pragma once
#include <fstream>
#include <iostream>
class ComplexNumber
{
private:
    int* real;
    int* imag;
public:
    ComplexNumber();
    ~ComplexNumber();
    ComplexNumber(const ComplexNumber&);
    ComplexNumber& operator=(const ComplexNumber&);
    friend std::istream& operator>>(std::istream&, ComplexNumber&);
    friend std::ostream& operator<<(std::ostream&, const ComplexNumber&);
    ComplexNumber operator+(const ComplexNumber&);
    friend ComplexNumber operator-(const ComplexNumber&, const ComplexNumber&);
    ComplexNumber operator* (const ComplexNumber&);
    friend ComplexNumber operator /(const ComplexNumber&, const ComplexNumber&);
};

ComplexNumber::ComplexNumber()
{
    real = new int{ 10 };
    imag = new int{ 10 };
}
ComplexNumber ComplexNumber::operator+(const ComplexNumber& a)
{
    ComplexNumber temp;
    temp.real = this->real + a.real;
    temp.imag = this->imag + a.imag;
    return temp;
    
}

코드를 컴파일하려고 할 때 a.real 및 a.imag에서 표현식에 정수 또는 범위가 지정되지 않은 열거 형 유형이 있어야한다는 오류가 표시됩니다. 이것은 무엇을 의미 하는가? 미리 도와 주신 분들께 감사드립니다.

편집하다


std::ostream& operator<<(std::ostream& out, const ComplexNumber& a)
{
    out << *(a.real) << " " << *(a.imag) << "i"; 
    return out;
}

ComplexNumber  aa, ab, ac;
ac = aa + ab;
std::cout << ac << std::endl;

이것은 여전히 ​​20과 20i 대신 10과 10i를 출력합니다.

EDIT2 :

ComplexNumber& ComplexNumber::operator=(const ComplexNumber& a)
{
    ComplexNumber temp;
    *(temp.real) = *(a.real);
    *(temp.imag) = *(a.imag);
    return temp;
}
Arty

아래 코드와 같이 연산자로 real/ imag포인터를 역 참조하십시오 *. 또는 int에 대한 포인터 대신 일반 int(예 :)으로 저장해야 할 수도 있습니다 int real;.

온라인으로 시도하십시오!

#include <fstream>
#include <iostream>

class ComplexNumber
{
private:
    int* real;
    int* imag;
public:
    ComplexNumber();
    ~ComplexNumber() {}
    ComplexNumber(const ComplexNumber&);
    ComplexNumber& operator=(const ComplexNumber&);
    friend std::istream& operator>>(std::istream&, ComplexNumber&);
    friend std::ostream& operator<<(std::ostream&, const ComplexNumber&);
    ComplexNumber operator+(const ComplexNumber&);
    friend ComplexNumber operator-(const ComplexNumber&, const ComplexNumber&);
    ComplexNumber operator* (const ComplexNumber&);
    friend ComplexNumber operator /(const ComplexNumber&, const ComplexNumber&);
};

ComplexNumber::ComplexNumber()
{
    real = new int{ 10 };
    imag = new int{ 10 };
}
ComplexNumber ComplexNumber::operator+(const ComplexNumber& a)
{
    ComplexNumber temp;
    *temp.real = *this->real + *a.real;
    *temp.imag = *this->imag + *a.imag;
    return temp;
    
}
ComplexNumber & ComplexNumber::operator=(const ComplexNumber& a)
{
    *real = *a.real;
    *imag = *a.imag;
    return *this;
    
}
std::ostream& operator<<(std::ostream& out, const ComplexNumber& a)
{
    out << *(a.real) << " " << *(a.imag) << "i"; 
    return out;
}

int main() {
    ComplexNumber aa, ab, ac;
    ac = aa + ab;
    std::cout << ac << std::endl;
    return 0;
}

산출:

20 20i

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++의 파생 클래스에서 기본 클래스 메서드를 오버로드 할 수 없습니다.

분류에서Dev

C ++의 클래스에서 연산자 오버로딩 함수를 어떻게 사용할 수 있습니까?

분류에서Dev

클래스 선언에서 오버로드 된 연산자를 사용할 수 있습니까?

분류에서Dev

C ++에서 << 연산자를 오버로드하는 동안 휴지통을 제거 할 수 없습니다.

분류에서Dev

오류 C2511 : 클래스에서 오버로드 된 멤버 함수를 찾을 수 없습니다.

분류에서Dev

C ++의 부모 클래스에서 자식 클래스로 데이터를 상속 할 수 없습니다.

분류에서Dev

Android Java에서 클래스를로드 할 수 없습니다.

분류에서Dev

C #에서 WMI 클래스를 사용할 수 없습니다.

분류에서Dev

Flutter에서 스프레드 연산자를 사용할 수 없습니다.

분류에서Dev

C ++ istream 연산자 오버로드-친구가 선언되었지만 데이터 멤버에 액세스 할 수 없습니다.

분류에서Dev

"<<"연산자를 오버로드 할 수 없습니다.

분류에서Dev

C ++에서는 기본 클래스에서 공용 메서드를 호출 할 수 없습니다.

분류에서Dev

Java 클래스를 통해 MS SQL 서버에 연결할 수 없습니다.

분류에서Dev

C ++의 클래스 메서드에 반복자를 전달할 수 없습니다.

분류에서Dev

C ++에서 클래스의 변수를 수정할 수 없습니다.

분류에서Dev

클래스 내부에서 swiftmailer를로드 할 수 없습니다. 오류가 발생합니다. "Swift_SmtpTransport"클래스를 찾을 수 없습니다.

분류에서Dev

C ++ / CLI 가상 메서드, 파생 클래스에서 가상 메서드를 사용할 수 없습니다.

분류에서Dev

연산자 오버로딩을 수행 할 때 클래스 내에서 인쇄 함수를 사용할 수없는 이유는 무엇입니까?

분류에서Dev

Objective c의 한 클래스에서 다른 클래스로 변수 값을 전달할 수 없습니다.

분류에서Dev

C # 프로젝트에서 C ++ / CLI 프로젝트의 클래스를 사용할 수 없습니다.

분류에서Dev

런타임에 Moose 클래스의 오버로드 된 연산자를 어떻게 변경할 수 있습니까?

분류에서Dev

C # consoleApp은 별도의 클래스에서 정적 메서드를 호출 할 수 없습니다.

분류에서Dev

Spring이 ApplicationContext xml 파일에서 클래스를로드 할 수 없습니다.

분류에서Dev

Bash에서 메인 클래스를 찾거나로드 할 수 없습니다.

분류에서Dev

유형이 아닌 매개 변수가있는 C ++ 템플릿 클래스 : 할당 연산자를 오버로드하는 방법은 무엇입니까?

분류에서Dev

C ++ 20 : 자동 생성 된 연산자는 파생 클래스에서 참조 할 수 없습니까?

분류에서Dev

자식 클래스를 통해 부모 클래스 메서드에 액세스 할 수 없습니다.

분류에서Dev

다른 클래스의 C ++ 오버로딩 할당 연산자

분류에서Dev

연산자 << 클래스의 private int에 액세스 할 수 없습니다.

Related 관련 기사

  1. 1

    C ++의 파생 클래스에서 기본 클래스 메서드를 오버로드 할 수 없습니다.

  2. 2

    C ++의 클래스에서 연산자 오버로딩 함수를 어떻게 사용할 수 있습니까?

  3. 3

    클래스 선언에서 오버로드 된 연산자를 사용할 수 있습니까?

  4. 4

    C ++에서 << 연산자를 오버로드하는 동안 휴지통을 제거 할 수 없습니다.

  5. 5

    오류 C2511 : 클래스에서 오버로드 된 멤버 함수를 찾을 수 없습니다.

  6. 6

    C ++의 부모 클래스에서 자식 클래스로 데이터를 상속 할 수 없습니다.

  7. 7

    Android Java에서 클래스를로드 할 수 없습니다.

  8. 8

    C #에서 WMI 클래스를 사용할 수 없습니다.

  9. 9

    Flutter에서 스프레드 연산자를 사용할 수 없습니다.

  10. 10

    C ++ istream 연산자 오버로드-친구가 선언되었지만 데이터 멤버에 액세스 할 수 없습니다.

  11. 11

    "<<"연산자를 오버로드 할 수 없습니다.

  12. 12

    C ++에서는 기본 클래스에서 공용 메서드를 호출 할 수 없습니다.

  13. 13

    Java 클래스를 통해 MS SQL 서버에 연결할 수 없습니다.

  14. 14

    C ++의 클래스 메서드에 반복자를 전달할 수 없습니다.

  15. 15

    C ++에서 클래스의 변수를 수정할 수 없습니다.

  16. 16

    클래스 내부에서 swiftmailer를로드 할 수 없습니다. 오류가 발생합니다. "Swift_SmtpTransport"클래스를 찾을 수 없습니다.

  17. 17

    C ++ / CLI 가상 메서드, 파생 클래스에서 가상 메서드를 사용할 수 없습니다.

  18. 18

    연산자 오버로딩을 수행 할 때 클래스 내에서 인쇄 함수를 사용할 수없는 이유는 무엇입니까?

  19. 19

    Objective c의 한 클래스에서 다른 클래스로 변수 값을 전달할 수 없습니다.

  20. 20

    C # 프로젝트에서 C ++ / CLI 프로젝트의 클래스를 사용할 수 없습니다.

  21. 21

    런타임에 Moose 클래스의 오버로드 된 연산자를 어떻게 변경할 수 있습니까?

  22. 22

    C # consoleApp은 별도의 클래스에서 정적 메서드를 호출 할 수 없습니다.

  23. 23

    Spring이 ApplicationContext xml 파일에서 클래스를로드 할 수 없습니다.

  24. 24

    Bash에서 메인 클래스를 찾거나로드 할 수 없습니다.

  25. 25

    유형이 아닌 매개 변수가있는 C ++ 템플릿 클래스 : 할당 연산자를 오버로드하는 방법은 무엇입니까?

  26. 26

    C ++ 20 : 자동 생성 된 연산자는 파생 클래스에서 참조 할 수 없습니까?

  27. 27

    자식 클래스를 통해 부모 클래스 메서드에 액세스 할 수 없습니다.

  28. 28

    다른 클래스의 C ++ 오버로딩 할당 연산자

  29. 29

    연산자 << 클래스의 private int에 액세스 할 수 없습니다.

뜨겁다태그

보관