【问题标题】:how to access an object of classA defined in main from another class如何从另一个类访问 main 中定义的类的对象
【发布时间】:2013-10-13 10:44:40
【问题描述】:

我有两个具有各自命名空间的类。
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 中定义。

【问题讨论】:

标签: c++ namespaces


【解决方案1】:

很可能(但不肯定,没有看到代码)这个问题已经出现,因为 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;
  };
}

【讨论】:

  • 是的..这就是问题..正如上面描述的@M M和@Mohammad,。它是一个循环依赖问题。我需要的是更多练习 C++ 中的设计。我一生都在用 C 编码。需要一些时间才能习惯。感谢您的帮助。
  • @2am 关于 C++ 设计模式的一个小事实 - 将每个类放在其单独的命名空间中并不常见,也不是很好的做法。命名空间用于对相关类进行分组(如函数对相关代码进行分组或类对相关函数进行分组),通常一个命名空间包含多个类(例如std命名空间)
  • 是的,这就是我在过去几周观察到的:P 无论如何,你能推荐任何好的 C++ 设计模式书籍吗?我擅长 c++ 编程,但设计部分是我需要更多工作的地方。
  • 当然可以。不仅是我 - stackoverflow.com/questions/388242/…
猜你喜欢
  • 1970-01-01
  • 2021-07-20
  • 2011-04-18
  • 2019-11-21
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
相关资源
最近更新 更多