什么是非静态成员函数?
What is a nonstatic member function?
我被告知不能在类函数中使用'this'关键字。我是从c#来的,我习惯了这种工作方式,但是编译器告诉我它只能在非静态成员函数中使用。
D3DXVECTOR3 position;
void Position(D3DXVECTOR3 position)
{
this.position = position;
}
这是一个指针,包含对象的地址。
D3DXVECTOR3 position;
void YourClassNameHere::Position(D3DXVECTOR3 position)
{
this->position = position;
}
。
D3DXVECTOR3 position;
void YourClassNameHere::Position(D3DXVECTOR3 position)
{
(*this).position = position;
}
在c++中,您需要用类名限定Position
函数:
void YourClassNameHere::Position(D3DXVECTOR3 position)
也来自@Pubby8的答案this
是一个指针,而不是一个引用,所以你需要使用this->position
代替(或考虑使用不阴影类成员的参数名称-我喜欢在我的类成员上使用尾随_
)。
此外,c++默认不通过引用传递,所以如果D3DXVECTOR3
是一个复杂的类型,你将复制大量的数据。考虑将其作为const D3DXVECTOR3& position
传递。
不仅像您写的那样,Position
是一个自由函数(不与类关联),而且this
也是一个指针,而不是引用。
D3DXVECTOR3 position;
void ClassName::Position(D3DXVECTOR3 position)
{
this->position = position;
}
或者,如果是构造函数,
ClassName::ClassName(D3DXVECTOR3 p) : position(p)
{
}
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如何在C++中使用非静态成员函数作为回调函数
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- C++构造函数和静态成员
- 为什么传递非静态成员函数会导致编译错误?
- 非静态成员失败的线程调用函数
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 非静态成员函数的 decltype 格式不正确吗?
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- std::异步与非静态成员函数
- C++无效使用非静态成员函数?
- 指向重载静态成员的函数指针 - 在unique_ptr中用作自定义删除器
- 未使用的C++未优化的静态成员函数/变量
- C++:如何返回指向非静态成员函数的指针?
- 有没有一种方法可以使全局函数/静态成员函数一次可呼出
- 函数静态成员变量
- 隐藏模板化的辅助函数——静态成员或未命名的命名空间