我有两个类(非静态的)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;
};编辑:为了便于解释,我声明了静态类。我不知道正确的术语。所以实际上问题是:如何使用静态函数中的非静态成员?
发布于 2013-01-29 12:25:36
您不能从静态函数本身访问特定于类实例的任何内容。静态函数没有"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;
}发布于 2013-01-29 12:14:17
我觉得你不应该做这样的设计。当非静态成员未就绪时,静态函数被初始化。你说“类A,链接到许多其他类,并存储了许多其他信息。另一方面,由于某些windows API线程条件,B类必须是静态的。”在这种情况下,您可以更改设计并将A转换为静态类吗?
https://stackoverflow.com/questions/14575397
复制相似问题