我有一个类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()函数以接受类型的变量
code>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);
}
否则我建议您根本不要将其设为静态
。
关于C++:我可以将非静态成员变量的值赋给静态成员变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997194/