C++ 在非静态成员函数中对此的使用无效
我上了以下课程:C++ 在非静态成员函数中对此的使用无效,c++,C++,我上了以下课程: class Foo { private: static float scale; public: static float setScale(float scale); }; 当我尝试像这样实现setScale时: float Foo::setScale(float scale) { this->scale = scale; return scale; } 它抛出一个错误: 在非静态成员函数之外使用“this”无效 void Foo::s
class Foo {
private:
static float scale;
public:
static float setScale(float scale);
};
当我尝试像这样实现setScale时:
float Foo::setScale(float scale) {
this->scale = scale;
return scale;
}
它抛出一个错误:
在非静态成员函数之外使用“this”无效
void Foo::setScale(float scale) {
Foo::scale = scale;
}
我真的不明白,因为我的函数被标记为static
我看到一些相关的问题,但它没有回答我的问题
那么我该如何解决这个问题呢?
我知道我可以更改名称,并且不使用此
,但可能有解决方案吗
编辑:当我在类中实现函数时,它仍然抛出相同的错误。
这个
指针不在类的静态成员函数中。将定义更改如下:-
float Foo::setScale(float s) {
Foo::scale = s;
return s;
}
按以下方式更改函数定义
float Foo::setScale(float scale) {
Foo::scale = scale;
}
静态成员函数没有此隐式参数
< >在9.4.1节中的C++第2节的注释中,C++标准中明确地写了
2[注意:静态成员函数没有this指针
(9.3.2)。-结束注释]
您还必须将函数定义为具有返回类型void
,因为至少您没有从函数返回任何内容
void Foo::setScale(float scale) {
Foo::scale = scale;
}
静态
成员函数不属于类。换句话说,它只有一个实例。请注意如何使用范围解析操作符(Foo::setscale(1.f);
)而不是成员引用操作符(Foo.setscale(1.f)
)访问它们,因为它们不是类的实例的成员
class-Foo
{
公众:
无效剂量();
};
在本例中,如果我创建一个Foo f
并调用f.DoSomething()
,发生的情况是编译器实际上将DoSomething()
转换为DoSomething(Foo*this)
其中this
是f
的地址
但是,由于静态
成员函数不属于类,编译器不会将它们转换为包含该指针
另外,为什么有静态
成员功能?首先,您可以将函数的作用域限制为声明它的类
感谢阅读。是否应该将
setScale()
作为静态成员函数?静态成员函数是未绑定到特定实例的成员函数。在当前实例上设置数据成员的函数看起来与实际对象耦合,因此将其设置为静态与预期行为相矛盾。这同样适用于比例
。问问自己,scale
对于每个实例应该是不同的还是相同的。如果它应该是相同的,则将其设为静态的,否则不要。@broncoAbierto Function setScale声明为静态的。看原始帖子。哦,你是对的。我只看了变量。