我有两个类及其各自的命名空间。
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中调用该方法。
答案 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;
};
}