クラスのメンバ関数が別のクラスの戻り値型を持つことはできますか?クラスのメンバ関数
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 A
前class 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
はい、これは、あなたが順番にクラスを置く限り許されます。現在、あなたの例は動作しません。これは、次のとおりです。
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
{
};
をそれ以外の場合は、あなたのコードは動作するはずです。
あなたはそれを試してみませんか? (しかし、はい、許可されています) – UnholySheep
クラスを忘れると、typenameも返すことができます。 :) –
@SauravSahu:え? –