gpt4 book ai didi

C++:我可以将非静态成员变量的值赋给静态成员变量吗?

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:59 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com