如何从另一个类访问 main 中定义的类 A 的对象

how to access an object of classA defined in main from another class

本文关键字:定义 对象 访问 另一个 main      更新时间:2023-10-16

我有两个类,它们各自的命名空间。
类 A 具有类 B 的对象,并且可以调用类 B 的方法。


我希望类 B 也从类 A 调用一个方法,为此,我在类 B.h 中包含"classA.h",但是当我这样做时,我收到一个错误说..

error C2653: 'classB_namespace' : is not a class or namespace name

我正在为这个项目使用 win32 sdk,我已经在 classA.cpp 中定义了 WinMain(),在 WinMain() 中我有一个 classA 的对象,它调用在 Class B 中定义的 wndProct。

我想从类 B 访问这个 classA 对象(以便在类 A 中调用该方法,这就是我做这一切的原因......

如何,更重要的是,它能做到??我在WinMain()中的classA对象上使用extern不起作用。

所以底线是,我无法使用 WinMain() 中定义的对象从类 B 调用该方法,该方法在类 A 中定义。

很可能(但不是肯定的,没有看到代码)这个问题已经出现,因为它是一次性编译的C++。因此,#include不像其他语言(如 C# 或 java)中的 usage 指令 - 您必须跟踪所有定义以正确的顺序 - 每个类在使用之前都必须声明(甚至完全定义),无论代码是在单个文件中还是多个包含标头中。命名空间不会改变太多 - 必须保持定义的顺序。

这是错误的代码,因为在声明 B 类之前就提到了它:

class A {
  B objB;
};
class B {
  A *parent;
};

正确的申报顺序是:

class A;
class B {
  A *parent;
};
class A {
  B objB;
};

或者,每个类位于单独的命名空间中,它将如下所示:

namespace classA_namespace {
  class A;
}
namespace classB_namespace {
  class B {
    classA_namespace::A *parent;
  };
}
namespace classA_namespace {
  class A {
    classB_namespace::B objB;
  };
}