一些错误:
double Foo(double a=0; double b=1);
; 不是函数参数之间的分隔符,请改用,。
mX = Foo(2, 3);
Foo 是非静态函数,这意味着它与对象接口相关。如果不指定它与哪个对象相关,则不能调用它。
要修复它,您可以创建一个对象并调用相关对象的此函数,或者将此函数设为静态函数。
创建对象示例:
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;
};
使其成为静态函数的示例:
class Outer {
private:
static double Foo(double a=0, double b=1);
class Inner {
public:
Inner() {
mX = Outer::Foo(2, 3);
}
private:
double mX;
};
};
在静态函数Foo 的情况下,还可以考虑以下方式为 mX 赋予其值:
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++ Core Guidelines