0

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


我希望 B 类也从 A 类调用一个方法,为此,我在 classB.h 中包含“classA.h”,但是当我这样做时,我收到一条错误消息。

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

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

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

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

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

4

1 回答 1

2

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

这是错误的代码,因为在声明 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;
  };
}
于 2013-10-13T11:08:01.450 回答