2009-02-03 5 views
2

여러 클래스로 구성된 클래스가 있고 여러 생성자가 있습니다. 나는 또한 어떤 매개 변수를 사용하지 않는 생성자를 가지고,하지만 난 할 때이 기능을 사용하려면생성자의 이상한 동작

int main { 
    A a; 
} 

내가 이런 식으로 사용하는 경우 동안 컴파일러, 오류가 발생합니다

int main { 
    A a(); 
} 

그것은이다 승인. 그게 뭐야?

답변

11

첫 번째 main는 A의 기본 생성자를 사용하여 감사드립니다. 두 번째 함수는 매개 변수를 사용하지 않고 값으로 A를 반환하는 함수를 선언합니다.이 함수는 의도 한 것이 아닙니다.

그렇다면 A의 정의는 어떻게 보이고 컴파일러에서 생성되는 오류는 무엇입니까?

아, 그리고 당신이 주요의 선언에서 매개 변수 목록을 제공해야합니다 int main() { //...하지 int main { //...

2

확인함으로써 당신은 컴파일 또는 작동한다는 것을 의미? 코드의 라인 :

A a(); 

이 매개 변수를 사용하지 않는 입력 A의 개체를 반환 a라는 함수의 선언 (또는 프로토 타입)입니다.

누군가가 귀하의 실제 문제에 도움을 줄 수있는 사람이 있다면 최소한 class A에 대한 신고서를 게시해야한다고 생각합니다.

0

둘 다 맞았습니다. 안에 클래스가 있습니다.

1

Charles와 Michael Burr은 둘째 두 번째 선언이 실제로 함수 프로토 타입이며 A의 인스턴스가 아니라는 것을 확인했습니다.

첫 번째 코드가 작동하지 않은 이유를 가능한 이유에 관해서는

, 당신은이 상황에서 컴파일 오류가 발생 할 때

  1. 클래스 기본 생성자가 기본 클래스에서 A 상속; 또는
  2. 클래스 A에는 기본 생성자가없는 형식의 개체가 포함되어 있습니다. 또는
  3. 클래스 A에는 참조 구성원이 들어 있습니다.

그리고 당신은 그것의 initialiser 목록에서이 하위 개체 중 하나 이상을 생략 기본 생성자를 제공 한

.

이러한 하위 개체는 모두 초기화 할 수있는 방법이 필요하며 컴파일러에서 생성 한 기본 생성자는이를 수행하지 않습니다. 모든 경우에 초기화 프로그램 목록에서 초기화해야하며 본체 인 생성자는 초기화하지 않아야합니다.