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

时间:2013-10-13 10:44:40

标签: c++ namespaces

我有两个类及其各自的命名空间。
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()中定义的对象从classA中定义的classB中调用该方法。

1 个答案:

答案 0 :(得分: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;
  };
}