作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 A
类,其中有一个 static 成员函数 passName
int A::passName()
{
.... // skip some code
std::string name = ...; // result from codes above
assign(); // this is a static member function in class A
pointerA->passMethodName(name); // pointerA is a class-A static member variable, but of type
// class-B, passMethodName is a class-B non-static member function.
}
赋值函数是:
void A::assign(){
pointerA = tempPointerA;
}
说明:tempPointerA是在运行过程中产生的一个值。它是一个非静态私有(private)类 A 成员,每次构造 A 类的新对象时都会对其进行初始化。但是我知道在静态函数中我只能直接使用静态成员,所以我需要确保pointerA是静态成员。那么 assign() 函数是否可行(或者我更愿意说,这里展示的整个工作原理是否可行)?
谢谢你的想法!
最佳答案
没有。静态成员函数只能对静态变量进行操作或调用其他静态函数。 (或 namespace 范围的函数,它们或多或少与静态函数相同)。
§9.4.1 [class.static.mfct]
A static member function does not have a this pointer.
因此无法在static
函数中访问非静态成员变量。
如果你真的需要assign
来保持静态,那么你应该做的是重构你的
assign()函数来接受一个类型的变量
tempPointerA`,然后传入你想要的变量。
int A::passName(B* _in)
{
std::string name = ...; // result from code above
assign(_in); // this is a static member function in class A
_in->passMethodName(name);
}
否则,我建议您根本不要将其设置为static
。
关于C++:我可以将非静态成员变量的值赋给静态成员变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997194/
我是一名优秀的程序员,十分优秀!