我上了以下课:
class Foo {
private:
static float scale;
public:
static float setScale(float scale);
};
当我尝试像这样实现setScale时:
float Foo::setScale(float scale) {
this->scale = scale;
return scale;
}
它抛出一个错误:
因为我的功能被标记为静态,所以我真的没有得到。
我看到了一些相关的问题,但没有回答我的问题。
那么我该如何解决呢?
我知道我可以更改名称,并且不使用
this
,但是可能有解决方案?编辑:同样,当我在类内实现函数时,它仍然引发相同的错误。
最佳答案
static
成员函数是,不属于类。换句话说,只有一个实例。请注意,如何使用范围解析运算符(Foo::setscale(1.f);
)而不是成员引用运算符(Foo.setscale(1.f)
)访问它们,因为它们是而不是类的实例的成员。
class Foo
{
public:
void DoSomething();
};
在此示例中,如果我创建
Foo f
并调用f.DoSomething()
,则发生的情况是编译器实际上将DoSomething()
转换为DoSomething(Foo* this)
,其中this
是f
的地址。但是,由于
static
成员函数不是类的一部分,而是,因此编译器不会将其转换为采用this
指针。附言那么,为什么要使用
static
成员函数呢?首先,您可以将函数的范围限制为在其中声明的类。感谢您的阅读。