Может ли функция-член в классе иметь тип возвращаемого значения другого класса?Функции-члены в классах
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
{
};
Это разрешено?
Да, если компилятор знает о B
перед вашей декларацией для func
. Либо переместите определение для class B {};
выше class A
, либо вперед объявите B
, написав class B;
до class A
.
Да, вы можете вернуть любой допустимый тип, и если этот тип допускает, что нет никаких дополнительных ограничений на то, что функция-член может вернуть vs регулярной функции.
Хотя в вашем примере кода func()
не может вернуть объект типа B
, как он еще не определен. Вы должны были бы двигаться class B
определения, прежде чем class A
или использовать вперед декларацию, а затем объявить только (не определен) 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
{
};
Вам необходимо либо поставить класс 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
Забудьте класс, вы даже можете вернуть имя. :) –
@SauravSahu: Э? –