오버로드된 생성자 및 클래스 멤버 액세스 오류
두 개의 생성자가 있는 클래스를 생각해 보세요. 하나는 인수가 없고 다른 하나는 단일 정수 인수가 있습니다. 의도한 대로 후자 생성자 함수를 사용하여 객체를 생성하는 동안 인수가 없는 생성자를 사용하면 오류가 발생합니다.
예를 들어 다음 코드 조각을 컴파일하면
class Foo { public: Foo() {}; Foo(int a) {}; void bar() {}; }; int main() { // This works... Foo foo1(1); foo1.bar(); // This fails... Foo foo2(); foo2.bar(); return 0; }
다음 오류가 생성됩니다. :
error: request for member 'bar' in 'foo2', which is of non-class type 'Foo ()()'
이 오류는 컴파일러가 Foo foo2() 코드를 해석하기 때문에 발생합니다. 이름이 'foo2'이고 반환 유형이 'Foo'인 함수 선언으로. 그러나 인수 없는 생성자를 사용하여 'Foo' 유형의 객체를 인스턴스화하려고 합니다.
이 문제를 해결하려면 Foo foo2(); Foo에게 foo2;. 이 변경 사항은 기본 생성자를 사용하여 객체를 생성하려고 한다는 것을 컴파일러에 알립니다.
또는 인수 없는 생성자와 단일 인수 생성자가 모두 존재하기 때문에 오버로드된 생성자에서 모호함을 나타내는 오류가 발생할 수 있습니다. . 이러한 경우 Foo foo2{}를 사용하여 인수 없는 생성자를 명시적으로 호출합니다. 모호함을 해결해드립니다.
위 내용은 인수 없는 생성자가 '멤버 요청' 오류를 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!