내 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] 삭제
몇 마디 만하겠습니다