我有两个班级(非静态)A& (静态)B。 我试图将对象A存储到B中,以便我可以在funcB()中使用它的函数。 但是我知道静态类不能存储非静态变量&功能。无论如何都要通过这个而不是将A类转换成静态类?
class A
{
public:
A();
void funcA();
private:
int A;
};
class B
{
public:
B(A *objA);
static void funcB();
private:
A *objA;
};
编辑: 我说静态类让它更容易解释。我不知道正确的用语。 所以问题实际上是:我如何使用静态函数中的非静态成员?
答案 0 :(得分:1)
您无法从静态函数本身访问特定于类实例的任何内容。静态函数没有“this”指针(编译器将指针传递给调用非静态函数函数的对象实例)。您可以通过将指针传递给要修改的对象来解决这个问题,但是为什么要使用静态函数呢?我的建议是避免你想要做的事情,但我提供了两种方法来做到这一点(作为一个很好的学习例子)。
请参阅下文,了解使用
的示例 #include <iostream>
using namespace std;
class A
{
public:
A(int value) : a(value){}
void funcA();
public:
int a;
};
class B
{
public:
B()
{
objA = new A(12);
}
void funcB2()
{
B::funcB(*objA);
}
static void funcB(A const & value)
{
cout << "Hello World! " << value.a << endl;
}
private:
A *objA;
};
int main()
{
A a(10);
B::funcB(a);
B b;
b.funcB2();
return 0;
}
答案 1 :(得分:0)
我认为你不应该像这样设计。当非静态成员未准备好时,将初始化静态函数。你说“A类,链接到许多其他类,并存储了许多其他信息。另一方面,B类由于某些Windows API线程条件而必须是静态的。” 。在这种情况下,您可以更改设计并将A转换为静态类吗?