클래스의 멤버 함수가 다른 클래스의 반환 유형을 가질 수 있습니까?클래스의 멤버 함수
class A
{
int a,b;
public:
B func(int x); // func returns type B which is another class
};
class B
{
};
허용 되나요?
클래스의 멤버 함수가 다른 클래스의 반환 유형을 가질 수 있습니까?클래스의 멤버 함수
class A
{
int a,b;
public:
B func(int x); // func returns type B which is another class
};
class B
{
};
허용 되나요?
예, 컴파일러가 func
에 대한 선언 전에 B
을 알고있는 한. class B {};
의 정의를 class A
위로 옮기거나 B
을 class A
앞에 class B;
으로 작성하여 전달하십시오.
예, 유효한 유형을 반환 할 수 있으며 해당 유형이 허용하는 경우 멤버 함수가 반환 할 수있는 기능에 대한 추가 제한 사항이 없으며 일반 기능과 비교할 수있는 추가 제한이 없습니다. 그것은 아직 정의되지 않는 코드 예제 func()
에서
비록 형식 B
의 객체를 반환 할 수 없습니다. 앞으로 선언에 대한
class B;
class A {
public:
B func(int x); // declared
B func2() { return B{}; } // this would not compile with forward declaration of B
};
class B {
};
// this definition must see class B defined, not forward declared
B A::func(int x)
{
return B{};
}
추가 세부 사항 : 만 class B
정의 뒤에 그것을 당신이 A::func
을 class A
전에 class B
정의를 이동하거나 선언을 앞으로 사용 만 (정의되지 않음) 선언해야합니다, 그리고 당신은 정의 (구현) 할 수 있습니다 을 찾을 수 있습니다 here
예, 클래스를 순서대로 넣을 수 있습니다. 현재 예제가 작동하지 않습니다. 그것은이다 :
class B
{
};
class A
{
int a,b;
public:
B func(int x); // func returns type B which is another class
};
또는 앞으로 선언 :
class A
{
int a,b;
public:
B func(int x); // func returns type B which is another class
};
class B
{
};
당신 중 하나는이처럼 전에 클래스 B를 둘 필요가
class B; //Forward Declaration.
class A
{
int a,b;
public:
B func(int x); // func returns type B which is another class
};
class B
{
};
그렇지 않으면, 여러분의 코드가 작동합니다.
왜 사용하지 않으시겠습니까? (하지만 그렇습니다. 허용됩니다) – UnholySheep
클래스를 잊어 버리면 typename도 반환 할 수 있습니다. :) –
@SauravSahu : 응? –