2013-05-19 2 views
0

다른 클래스에서 생성자를 호출하려고합니다. 그러나 불행하게도 나는이 오류가 발생합니다 :이 범위에서 함수가 선언되지 않은 이유는 무엇입니까?

Fun2 was not declared in this scope

이 내 코드입니다 :

class Fun1 { 
public: 
    Fun1() { 
     Fun2("Message"); 
    } 
}; 

class Fun2 { 
public: 
    Fun2 (std::string s) { 
     std::cout << s; 
    } 
}; 

int main() 

} 

어떻게 다른 클래스의 생성자 내 "메시지"를 보낼 수 있습니까?

답변

2

일반적으로 C++는 위에서 아래로 컴파일됩니다. 정의하기 전에 Fun2을 사용하려고하므로 컴파일러는 불평을합니다. 대신, 당신은 단순히 처음 Fun2 클래스를 정의 할 수 있습니다

class Fun2 { 
public: 
    Fun2 (std::string s) { 
     std::cout << s; 
    } 
}; 

class Fun1 { 
public: 
    Fun1() { 
     Fun2("Message"); 
    } 
}; 

을 이제 컴파일러는 식별자 Fun2를 사용하여 볼 때, 그것은 이미 정의를 볼 수 있기 때문에에 해당하는 것을 알고있다.

컴파일러가 실제로 여러 패스에서 코드를 구문 분석하고 식별자가 사용 된 후에 (예 : 멤버) 이러한 식별자가 선언 될 수있는 경우가 있습니다.

1

Fun1을 정의 할 때 Fun2가 정의되지 않았습니다.

앞으로 선언하십시오.

class Fun2; 

class Fun 1 { 
    ... class definition 
} 

class Fun2 { 
    .... class definition 
} 
+0

그들이 가지고있는 모든 것이 'Fun1'에있는'Fun2' 임시 객체를 생성 할 수 없습니다. –

2

당신이 Fun1에서 사용하는 경우 Fun2에 먼저 선언해야합니다 :

class Fun2 { 
    public: 
    Fun2 (std::string s) { 
     std::cout << s; 
    } 
}; 

class Fun1 { 
    public: 
    Fun1() { 
     Fun2("Message"); 
    } 
}; 

int main() 

} 

난 그냥> 코멘트 (50) 명성 포인트를 획득 할 수 있습니다. <

+0

또는 아마도 이것을 선언 할 수 있습니다 .. –

+0

은 함수 프로토 타입을 좋아합니다. 그것은 디자인적인 것입니다. –

관련 문제