我上了以下课:

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),其中thisf的地址。

但是,由于static成员函数不是类的一部分,而是,因此编译器不会将其转换为采用this指针。

附言那么,为什么要使用static 成员函数呢?首先,您可以将函数的范围限制为在其中声明的类。

感谢您的阅读。

10-07 19:28
查看更多