C ++에서 참조로 객체를 전달하기 위해 기본 생성자가 필요한 이유는 무엇입니까?

ewpcasey

내 C ++ 컴파일러에서 다음을 시도 할 때 "Foo 클래스에 대한 기본 생성자가 없습니다"라는 오류가 발생합니다.

MyClass :: MyClass (const Foo & foo) {...}

참조를 전달하는 경우 개체가 이미 초기화되어 있어야합니다. 맞습니까? 복사 생성자에는 문제가되지 않습니다. 제가 명시 적으로 정의했기 때문입니다. 그렇다면 참조를 전달하기 위해 기본 생성자가 필요한 이유는 무엇입니까?

내가 생각할 수 있었던 유일한 것은 할당 할 메모리 양을 모를 수도 있다는 것입니다. 그게 문제라면 컴파일러에게이 개체를 동적으로 할당 할 것임을 알리는 방법이 있습니까? 온라인에서 이에 대한 답변을 찾을 수 없었으며 도움을 주시면 정말 감사하겠습니다.

편집 : 실제 코드에서 편집 할 것입니다.

MemberManager.cpp :

#include "MemberManager.h"

MemberManager::MemberManager(const NodeManager& nodeSet, std::vector<int> cctMat, int n)
{
    for(int i = 0; i < n; i++)
    {
        memSet[i] = Member();
    }
}

NodeManager.h

#include "Node.h"

class NodeManager
{
public:
    //constructors
    NodeManager(std::vector<double> crdMat, std::vector<Constraint> cstMat, int n):
        nodeSet(n) {};
    //copy
    NodeManager(const NodeManager& src):
        nodeSet(src.nodeSet) {};
}

내 정확한 오류 메시지는 MemberManager :: MemberManager (...)의 첫 번째 본문 괄호 아래에있는 빨간색 밑줄이며 NodeManager에 대한 기본 생성자가 없다고 말합니다. 이것은 내 의도이지만 기본 생성자가 필요한 이유를 이해할 수 없습니다.

마이크 시모어

참조로 객체를 전달하기 위해 기본 생성자가 필요하지 않습니다. 당신의 코드는 그러한 일이 필요한 다른 일을해야합니다.

내 생각 엔 MyClass멤버 유형이 Foo있습니다. 기본 생성 가능하지 않은 경우 선언 또는 생성자의 이니셜 라이저 목록에서 초기화해야합니다.

MyClass::MyClass(const Foo& foo) : foo(foo) { ... }
                                   ^^^^^^^^
                                   initialiser list

이것은 멤버가 호출 foo되고 함수 매개 변수를 복사하여 초기화되어야한다고 가정합니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Rust에서 때때로 참조 데이터를 소유하기 위해 참조 보유 구조체가 필요할 때의 패턴은 무엇입니까?

분류에서Dev

새로운 프로세스를 생성하기 위해 포크가 필요한 이유는 무엇입니까?

분류에서Dev

C #에서 개체가 자체 기본 생성자에서 생성하는 자식 개체의 생성자에 자신에 대한 참조를 전달할 수 있습니까?

분류에서Dev

Chrome에서 기본 브라우저로 설정하기 위해 관리자 액세스 권한이 필요한 이유는 무엇입니까?

분류에서Dev

부트 스트랩 버튼을 전체 너비로 만들기 위해 Bootstrap btn에 width : 100 %가 필요한 이유는 무엇입니까? 표시하지 않음 : 블록; 기본적으로 버튼을 전체 너비로 만들까요?

분류에서Dev

Mondrian-계층 구조에서 멤버를 참조하기 위해 명시적인 수준이 필요한 이유는 무엇입니까?

분류에서Dev

위치 서비스를 개선하기 위해 Wi-Fi가 필요한 이유는 무엇입니까?

분류에서Dev

배열을 구성원으로 갖는 구조체 배열을 전달하기 위해 C에서 C #을 호출하는 방법은 무엇입니까?

분류에서Dev

약한 자체를 정적 함수의 클로저로 전달하는 것에서 유지주기가 발생하는 이유는 무엇입니까?

분류에서Dev

C ++에서 부모 기본 생성자를 암시 적으로 호출하는 이유는 무엇입니까?

분류에서Dev

코드를 작동시키기 위해 % c 앞에 공백이 필요한 이유는 무엇입니까?

분류에서Dev

S3에서 MFA 삭제를 활성화하기 위해 버전 관리가 필요한 이유는 무엇입니까?

분류에서Dev

여기서 참조로 클래스 객체를 전달할 수없는 이유는 무엇입니까?

분류에서Dev

"ls"를 실행하기 위해 별도의 프로세스가 필요한 이유는 무엇입니까?

분류에서Dev

C #에서 기본적으로 부모 생성자를 사용할 수없는 이유는 무엇입니까?

분류에서Dev

비 정적 생성자 내에서 정적 읽기 전용 필드 객체에 대해 SendCompletedEventHandler를 정의 할 수있는 이유는 무엇입니까?

분류에서Dev

이동 생성자에서 rvalue 참조를 null로 설정해야하는 이유는 무엇입니까?

분류에서Dev

조건에 따라 다른 생성자로 C ++ 참조를 초기화하는 방법은 무엇입니까?

분류에서Dev

객체 초기화에서 할당 연산자에 의해 생성자에 매개 변수를 전달할 수있는 이유는 무엇입니까?

분류에서Dev

함수에 전달하기 전에 구조체를 초기화해야하는 이유는 무엇입니까?

분류에서Dev

객체가 참조를 통해 자동으로 전달되는 이유는 무엇입니까?

분류에서Dev

객체 내의 필드에 대한 "속기"참조 작성 : 방법과 이유는 무엇입니까?

분류에서Dev

내 팩토리 메서드를 직접 사용하는 대신 기본 생성자가 필요한 이유는 무엇입니까?

분류에서Dev

유형 매개 변수를 제한하기 위해 특성이 필요한 이유는 무엇입니까?

분류에서Dev

g ++에 C ++에서 반복기 값을 인쇄하기 위해 -fpermissive 플래그가 필요한 이유는 무엇입니까?

분류에서Dev

g ++에 C ++에서 반복기 값을 인쇄하기 위해 -fpermissive 플래그가 필요한 이유는 무엇입니까?

분류에서Dev

객체의 한 속성에서 동일한 객체의 다른 속성에서 jQuery 선택기를 참조하면 오류가 발생하는 이유는 무엇입니까?

분류에서Dev

임시 반환 객체를 참조에 할당 할 때 공용 복사 생성자가 필요한 이유는 무엇입니까?

분류에서Dev

기본 클래스에서 실제 값에 액세스하기 위해 캐스트가 필요한 이유는 무엇입니까?

Related 관련 기사

  1. 1

    Rust에서 때때로 참조 데이터를 소유하기 위해 참조 보유 구조체가 필요할 때의 패턴은 무엇입니까?

  2. 2

    새로운 프로세스를 생성하기 위해 포크가 필요한 이유는 무엇입니까?

  3. 3

    C #에서 개체가 자체 기본 생성자에서 생성하는 자식 개체의 생성자에 자신에 대한 참조를 전달할 수 있습니까?

  4. 4

    Chrome에서 기본 브라우저로 설정하기 위해 관리자 액세스 권한이 필요한 이유는 무엇입니까?

  5. 5

    부트 스트랩 버튼을 전체 너비로 만들기 위해 Bootstrap btn에 width : 100 %가 필요한 이유는 무엇입니까? 표시하지 않음 : 블록; 기본적으로 버튼을 전체 너비로 만들까요?

  6. 6

    Mondrian-계층 구조에서 멤버를 참조하기 위해 명시적인 수준이 필요한 이유는 무엇입니까?

  7. 7

    위치 서비스를 개선하기 위해 Wi-Fi가 필요한 이유는 무엇입니까?

  8. 8

    배열을 구성원으로 갖는 구조체 배열을 전달하기 위해 C에서 C #을 호출하는 방법은 무엇입니까?

  9. 9

    약한 자체를 정적 함수의 클로저로 전달하는 것에서 유지주기가 발생하는 이유는 무엇입니까?

  10. 10

    C ++에서 부모 기본 생성자를 암시 적으로 호출하는 이유는 무엇입니까?

  11. 11

    코드를 작동시키기 위해 % c 앞에 공백이 필요한 이유는 무엇입니까?

  12. 12

    S3에서 MFA 삭제를 활성화하기 위해 버전 관리가 필요한 이유는 무엇입니까?

  13. 13

    여기서 참조로 클래스 객체를 전달할 수없는 이유는 무엇입니까?

  14. 14

    "ls"를 실행하기 위해 별도의 프로세스가 필요한 이유는 무엇입니까?

  15. 15

    C #에서 기본적으로 부모 생성자를 사용할 수없는 이유는 무엇입니까?

  16. 16

    비 정적 생성자 내에서 정적 읽기 전용 필드 객체에 대해 SendCompletedEventHandler를 정의 할 수있는 이유는 무엇입니까?

  17. 17

    이동 생성자에서 rvalue 참조를 null로 설정해야하는 이유는 무엇입니까?

  18. 18

    조건에 따라 다른 생성자로 C ++ 참조를 초기화하는 방법은 무엇입니까?

  19. 19

    객체 초기화에서 할당 연산자에 의해 생성자에 매개 변수를 전달할 수있는 이유는 무엇입니까?

  20. 20

    함수에 전달하기 전에 구조체를 초기화해야하는 이유는 무엇입니까?

  21. 21

    객체가 참조를 통해 자동으로 전달되는 이유는 무엇입니까?

  22. 22

    객체 내의 필드에 대한 "속기"참조 작성 : 방법과 이유는 무엇입니까?

  23. 23

    내 팩토리 메서드를 직접 사용하는 대신 기본 생성자가 필요한 이유는 무엇입니까?

  24. 24

    유형 매개 변수를 제한하기 위해 특성이 필요한 이유는 무엇입니까?

  25. 25

    g ++에 C ++에서 반복기 값을 인쇄하기 위해 -fpermissive 플래그가 필요한 이유는 무엇입니까?

  26. 26

    g ++에 C ++에서 반복기 값을 인쇄하기 위해 -fpermissive 플래그가 필요한 이유는 무엇입니까?

  27. 27

    객체의 한 속성에서 동일한 객체의 다른 속성에서 jQuery 선택기를 참조하면 오류가 발생하는 이유는 무엇입니까?

  28. 28

    임시 반환 객체를 참조에 할당 할 때 공용 복사 생성자가 필요한 이유는 무엇입니까?

  29. 29

    기본 클래스에서 실제 값에 액세스하기 위해 캐스트가 필요한 이유는 무엇입니까?

뜨겁다태그

보관