C ++ 한 클래스를 다른 클래스의 생성자로 전달할 때 기본 생성자 오류 없음

오리

한 클래스에 다른 클래스의 인스턴스가 속성으로있는 C ++ 클래스를 작성하고 있습니다. 클래스 생성자를 작성할 때 "Foo 클래스에 대한 기본 생성자가 없습니다"라는 오류가 계속 발생합니다. 다음은 오류를 재현하는 작은 예입니다.

class Foo {
    int size;
    char name;
    Foo(int s,char n) {
        size = s;
        name = n;
    }
};

class Bar {
    int size;
    char name;
    Foo foo;
    Bar(int s, char n,Foo f){
        size = s;
        name = n;
        foo = f;
    }
};

기본 생성자가 사용되도록 Foo의 클래스 생성자를 제거하면 오류가 사라집니다. Foo 클래스의 기존 인스턴스를 Bar의 생성자에 전달하기 때문에 오류가 Foo의 생성자에 대해 말하는 이유를 이해할 수 없습니다. 오류가 발생하는 이유는 무엇입니까? 코드를 어떻게 수정할 수 있습니까?

얀 슐트 케

할당이 아닌 초기화 목록을 통해 초기화 해야 합니다.

// You probably want these to be a struct, not class.
// This way all members are public by default.
struct Foo {
    int size;
    char name;

    Foo(int s,char n) : size{s}, name{n} {}
};

struct Bar {
    int size;
    char name;
    Foo foo;

    Bar(int s, char n, const Foo &f) : size{s}, name{n}, foo{f} {}
};

초기화 목록에서 멤버 변수를 초기화하지 않으면 기본값을 구성한 다음 값을 다시 할당하는 것과 같습니다. 그래서 당신은 이유없이 두 배의 일을하고 있습니다. (또한 생성자 및 멤버 이니셜 라이저 목록 참조 )

구조체에 대한 생성자를 정의했기 때문에 기본 생성자가 암시 적으로 삭제되어 컴파일 오류가 발생했습니다.

참고로, 이러한 생성자가 필요하지 않을 수도 있으며 대신 다음과 같이 집계 초기화사용할 수 있습니다 .

struct Foo {
    int size;
    char name;
};

void example() {
    Foo foo = {1, 'a'}; // the = is optional
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파생 클래스 속성을 Angular의 기본 클래스 생성자에 전달할 때 오류 발생

분류에서Dev

클래스 본문 외부에서 함수를 정의 할 때 C ++ 파생 생성자- "기본 생성자 없음"

분류에서Dev

오류 C2512 : 사용 가능한 적절한 기본 생성자가 없습니다 (클래스 아님).

분류에서Dev

react-navigation-stack을 사용하여 다른 구성 요소에 대한 사용자 정의 헤더로 클래스 구성 요소를 사용할 때 "클래스를 함수로 호출 할 수 없습니다"오류가 발생합니다.

분류에서Dev

클래스에 대한 기본 생성자가없는 오류

분류에서Dev

상속 된 인수를 기본 클래스 생성자에 전달한 다음 파생 클래스 생성자에서 작업 수행

분류에서Dev

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

분류에서Dev

Android의 Kotlin에서 활동 클래스에 대한 기본 생성자를 작성할 수 없습니다.

분류에서Dev

다른 클래스의 이동 생성자 내부에서 이동 클래스 (기본 생성자 없음)

분류에서Dev

파생 클래스는 기본 클래스의 개인 멤버를 다른 기본 클래스의 개인 멤버로 오버로드 할 수 없습니다.

분류에서Dev

클래스에 대한 기본 생성자가 없습니다.

분류에서Dev

클래스를 사용한 다음 클래스를 호출 할 때 오류 발생

분류에서Dev

모든 기본 인수가있는 명시 적 생성자는 동일한 클래스의 다른 생성자에서 호출 할 수 없습니다.

분류에서Dev

기본 클래스 참조로 파생 클래스 메서드를 호출 할 수 없을 때 동적 다형성이 어떻게 유용한가요?

분류에서Dev

기본 클래스의 C ++ 액세스 할 수없는 생성자

분류에서Dev

C ++ 다른 클래스의 생성자에게 클래스 전달 시도

분류에서Dev

c # 다른 클래스의 이벤트에 대한 매개 변수를 기본 클래스로 전달

분류에서Dev

다형성 기본 클래스의 하위 클래스 배열을 생성자로 전달하는 가장 간단한 구문

분류에서Dev

기본 클래스 목록에 파생 클래스를 추가 한 다음 C #의 기본 클래스 목록에서 Derived 클래스의 메서드를 호출 할 수 있습니까?

분류에서Dev

생성자 C ++의 다른 클래스에 대한 포인터 초기화

분류에서Dev

C ++ 파생 클래스 생성자 호출 기본 클래스 생성자 오류

분류에서Dev

C # 기본 생성자를 사용하여 다른 클래스의 문자열로 List <T> 채우기

분류에서Dev

생성자의 C ++ 구문 오류-arugment가 다른 클래스의 객체에 대한 참조입니다.

분류에서Dev

오류 : 종속성 (maven)을 추가 한 후 기본 클래스를 찾거나로드 할 수 없습니다.

분류에서Dev

일반 오류 : 클래스 생성자를 호출 할 수 없습니다. '

분류에서Dev

다른 클래스에서 메서드 호출-오류 : Customer 클래스의 생성자 Customer를 지정된 형식에 적용 할 수 없습니다.

분류에서Dev

전달 생성자는 기본 클래스의 복사 생성자를 2 번 호출합니다.

분류에서Dev

C # 생성자의 클래스에 대한 참조 전달

분류에서Dev

파생 클래스에 생성자를 추가 할 때 링크 오류가 발생합니다.

Related 관련 기사

  1. 1

    파생 클래스 속성을 Angular의 기본 클래스 생성자에 전달할 때 오류 발생

  2. 2

    클래스 본문 외부에서 함수를 정의 할 때 C ++ 파생 생성자- "기본 생성자 없음"

  3. 3

    오류 C2512 : 사용 가능한 적절한 기본 생성자가 없습니다 (클래스 아님).

  4. 4

    react-navigation-stack을 사용하여 다른 구성 요소에 대한 사용자 정의 헤더로 클래스 구성 요소를 사용할 때 "클래스를 함수로 호출 할 수 없습니다"오류가 발생합니다.

  5. 5

    클래스에 대한 기본 생성자가없는 오류

  6. 6

    상속 된 인수를 기본 클래스 생성자에 전달한 다음 파생 클래스 생성자에서 작업 수행

  7. 7

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

  8. 8

    Android의 Kotlin에서 활동 클래스에 대한 기본 생성자를 작성할 수 없습니다.

  9. 9

    다른 클래스의 이동 생성자 내부에서 이동 클래스 (기본 생성자 없음)

  10. 10

    파생 클래스는 기본 클래스의 개인 멤버를 다른 기본 클래스의 개인 멤버로 오버로드 할 수 없습니다.

  11. 11

    클래스에 대한 기본 생성자가 없습니다.

  12. 12

    클래스를 사용한 다음 클래스를 호출 할 때 오류 발생

  13. 13

    모든 기본 인수가있는 명시 적 생성자는 동일한 클래스의 다른 생성자에서 호출 할 수 없습니다.

  14. 14

    기본 클래스 참조로 파생 클래스 메서드를 호출 할 수 없을 때 동적 다형성이 어떻게 유용한가요?

  15. 15

    기본 클래스의 C ++ 액세스 할 수없는 생성자

  16. 16

    C ++ 다른 클래스의 생성자에게 클래스 전달 시도

  17. 17

    c # 다른 클래스의 이벤트에 대한 매개 변수를 기본 클래스로 전달

  18. 18

    다형성 기본 클래스의 하위 클래스 배열을 생성자로 전달하는 가장 간단한 구문

  19. 19

    기본 클래스 목록에 파생 클래스를 추가 한 다음 C #의 기본 클래스 목록에서 Derived 클래스의 메서드를 호출 할 수 있습니까?

  20. 20

    생성자 C ++의 다른 클래스에 대한 포인터 초기화

  21. 21

    C ++ 파생 클래스 생성자 호출 기본 클래스 생성자 오류

  22. 22

    C # 기본 생성자를 사용하여 다른 클래스의 문자열로 List <T> 채우기

  23. 23

    생성자의 C ++ 구문 오류-arugment가 다른 클래스의 객체에 대한 참조입니다.

  24. 24

    오류 : 종속성 (maven)을 추가 한 후 기본 클래스를 찾거나로드 할 수 없습니다.

  25. 25

    일반 오류 : 클래스 생성자를 호출 할 수 없습니다. '

  26. 26

    다른 클래스에서 메서드 호출-오류 : Customer 클래스의 생성자 Customer를 지정된 형식에 적용 할 수 없습니다.

  27. 27

    전달 생성자는 기본 클래스의 복사 생성자를 2 번 호출합니다.

  28. 28

    C # 생성자의 클래스에 대한 참조 전달

  29. 29

    파생 클래스에 생성자를 추가 할 때 링크 오류가 발생합니다.

뜨겁다태그

보관