Некоторые ошибки:
double Foo(double a=0; double b=1);
;
не является разделителем между параметрами функции, вместо этого используйте ,
.
mX = Foo(2, 3);
Foo
не указано c функция, которая означает, что это связано с интерфейсом объекта. Вы не можете вызвать его, не указав, к какому объекту он относится.
Чтобы исправить это, вы можете как создать объект, так и вызвать эту функцию связанного объекта, или сделать эту функцию устаревшей c.
Пример создания объекта:
class Inner {
public:
Inner() {
Outer o; // Consider making it a class member object, so in each call / use it will relate to the same one. Be aware that in this case you will need to use a pointer to the outer class, due to 'incomplete type' error.
mX = o.Foo(2, 3);
}
private:
double mX;
};
Пример создания функции stati c:
class Outer {
private:
static double Foo(double a=0, double b=1);
class Inner {
public:
Inner() {
mX = Outer::Foo(2, 3);
}
private:
double mX;
};
};
Рассмотрим также следующие способы присвоения mX его значения, в случае stati c function Foo
:
class Inner {
public:
Inner() {}
private:
double mX = Outer::Foo(2, 3); // Recommended by Cpp guidelines.
};
Или:
class Inner {
public:
Inner() : mX(Outer::Foo(2, 3)) {} // Using initialize list
private:
double mX;
};
Ссылки:
C ++ Основные рекомендации