包容性问题

发布于 2024-09-12 12:46:58 字数 668 浏览 6 评论 0原文

我的包含模式如下:

/*
 * Class1.h
 */

#ifndef CLASS1_H_
#define CLASS1_H_

#include "Class2.h"

namespace Class1_namespace
{

class Class1
{
  Class2* Class2_ptr;
  void Class1_member()
  {
      (*Class2_ptr).Class2_method();
  }
};

}

#endif /* CLASS1_H_ */

/*
 * Class2.h
 */

#ifndef CLASS2_H_
#define CLASS2_H_

#include "Class1.h"

class Class2
{
    Class1_namespace::Class1 Class2_data;

public:
    void Class2_method(){};
};

#endif /* CLASS2_H_ */

/*
 * main.cpp
 */

#include "Class1.h"

int main()
{
    return 0;
}

但是,这会导致错误“'Class1_namespace' 未命名类型。”

这个错误是由我的内含物的排序引起的吗?

有哪些可能的解决方案?我对前向声明能否解决我的问题表示怀疑。

I have an inclusion pattern as follows:

/*
 * Class1.h
 */

#ifndef CLASS1_H_
#define CLASS1_H_

#include "Class2.h"

namespace Class1_namespace
{

class Class1
{
  Class2* Class2_ptr;
  void Class1_member()
  {
      (*Class2_ptr).Class2_method();
  }
};

}

#endif /* CLASS1_H_ */

/*
 * Class2.h
 */

#ifndef CLASS2_H_
#define CLASS2_H_

#include "Class1.h"

class Class2
{
    Class1_namespace::Class1 Class2_data;

public:
    void Class2_method(){};
};

#endif /* CLASS2_H_ */

/*
 * main.cpp
 */

#include "Class1.h"

int main()
{
    return 0;
}

However, this leads to the error “'Class1_namespace' does not name a type.”

Is this error caused by the ordering of my inclusions?

What are some possible solutions? I'm dubious about forward declarations solving my problem.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

阪姬 2024-09-19 12:46:58

Class1 不需要包含 Class2。

当你有相互依赖时(你没有——你可以不包含 2 合 1),通常可以通过使用前向声明而不是包含来解决它。

例如,假设 Class1 看起来像这样,

#include "Class2.h"

namespace Class1_namespace
{

    class Class1
    {
        Class2* class2;
    };

}

在您认为需要包含的地方,您可以这样做:

class Class2;

namespace Class1_namespace
{

    class Class1
    {
        Class2* class2;
    };

}

打破相互包含。

Class1 doesn't need to include Class2.

When you have mutual dependency (which you don't -- you could just not include 2 in 1), you can usually solve it by using forward declarations instead of inclusions.

For example, let's say that Class1 looked like this

#include "Class2.h"

namespace Class1_namespace
{

    class Class1
    {
        Class2* class2;
    };

}

Where you think you need the include, you could instead do this:

class Class2;

namespace Class1_namespace
{

    class Class1
    {
        Class2* class2;
    };

}

to break the mutual inclusion.

我很OK 2024-09-19 12:46:58

在class1.h中,尝试删除class2.h中不必要的循环#include。如果需要循环依赖(或者即使不需要),请考虑使用前向声明。

In class1.h, try removing the unnecessary and circular #include of class2.h. If a circular dependency is required -- or even if not -- consider using forward declarations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文