한 클래스에 다른 클래스의 인스턴스가 속성으로있는 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] 삭제
몇 마디 만하겠습니다