생성자 호출 오류: "비클래스 유형의 멤버 요청" 이해
특정 생성자 매개변수를 사용하여 객체를 인스턴스화할 때 프로그래머는 다음과 같은 문제가 발생할 수 있습니다. "클래스 유형이 아닌 '..'에서 '..' 멤버를 요청합니다." 오류가 발생했습니다. 이 오류의 원인을 이해하는 것은 오류를 효과적으로 해결하는 데 매우 중요합니다.
제공된 코드 예제는 문제를 보여줍니다. Foo 클래스에는 인수가 없는 기본 생성자와 단일 정수 매개변수를 허용하는 생성자라는 두 개의 생성자가 있습니다. 의도한 대로 매개변수화된 생성자 함수를 사용하여 foo1을 인스턴스화합니다. 그러나 기본 생성자를 호출하면 컴파일 오류가 발생합니다.
왜 이런 일이 발생합니까? 구문
Foo foo2();
은 그 자체를 함수 선언으로 오해합니다. 컴파일러는 이를 반환 유형이 Foo인 foo2라는 함수를 선언하고 괄호를 기반으로 하는 인수를 기대하는 것으로 인식합니다. 그러나 의도는 인수를 사용하지 않는 기본 생성자를 사용하여 foo2라는 객체를 인스턴스화하는 것입니다.
결과적으로 컴파일러는 foo2를 Foo()라는 클래스가 아닌 유형으로 지정합니다. 이 지정은 Foo 클래스 내에 정의된 메서드에 대한 액세스를 방지하므로 foo2.bar() 호출이 유효하지 않게 렌더링됩니다.
이 오류를 수정하려면 구문을 다음과 같이 조정해야 합니다.
Foo foo2;
괄호를 생략하면 컴파일러는
Foo foo2
을 기본값을 사용하는 foo2의 객체 선언으로 해석합니다. 생성자. 이는 Foo 유형의 객체를 성공적으로 인스턴스화하여 bar()를 포함한 해당 멤버 함수에 대한 액세스를 허용합니다.
위 내용은 왜 'Foo foo2();'를 수행합니까? '클래스가 아닌 유형의 멤버 요청' 오류가 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!