2016-10-14 14 views
-2

クラスのメンバ関数が別のクラスの戻り値型を持つことはできますか?クラスのメンバ関数

class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

class B 
{ 
}; 

これは許可されていますか?

+1

あなたはそれを試してみませんか? (しかし、はい、許可されています) – UnholySheep

+0

クラスを忘れると、typenameも返すことができます。 :) –

+0

@SauravSahu:え? –

答えて

0

はい、funcの宣言の前にコンパイラが約Bを知っている限りです。 class B {};の定義をclass Aより上に移動するか、またはBclass Aの前に書き込んでclass B;と記述してください。

1

はい、有効な型を返すことができます。その型が許可されている場合、メンバ関数が返すことができるものと通常の関数を返すことに追加の制限はありません。

コード例では、func()はまだ定義されていないため、タイプBのオブジェクトを返すことはできません。あなたはclass Aclass B定義を移動したり、宣言を前方に使用し、唯一のA::funcが(定義されていない)を宣言した後、あなただけclass 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{}; 
} 

前方宣言に関する追加の詳細をが見つかりましたhere

0

はい、これは、あなたが順番にクラスを置く限り許されます。現在、あなたの例は動作しません。これは、次のとおりです。

class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

class B 
{ 
}; 

次のいずれかがこのように、Aの前にクラスBを配置する必要があります。

class B 
{ 
}; 
class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

または前方にそれを宣言します。

class B; //Forward Declaration. 
class A 
{ 
    int a,b; 
public: 
    B func(int x); // func returns type B which is another class 
}; 

class B 
{ 
}; 

をそれ以外の場合は、あなたのコードは動作するはずです。

関連する問題