0

我有两个类(非静态)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;
};

编辑:我声明了静态类以使其更易于解释。我不知道正确的术语。所以问题实际上是:我如何使用静态函数中的非静态成员?

4

2 回答 2

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;
}
于 2013-01-29T04:25:36.013 回答
0

我认为你不应该做这样的设计。当非静态成员未准备好时,将初始化静态函数。您说“A类链接到许多其他类并存储了许多其他信息。另一方面,由于某些Windows API线程条件,B类必须是静态的。” . 在这种情况下,你能改变你的设计,把 A 变成静态类吗?

于 2013-01-29T04:14:16.803 回答