C++ C++;:跨类的结构

C++ C++;:跨类的结构,c++,class,struct,C++,Class,Struct,我有两个类:MazeClass和CreatureClass,它们使用一个名为“坐标”的结构,我如何能够在这两个类中使用该结构? 我尝试过两次将结构放入,结果得到: MazeClass.h:16:8:错误:重新定义“结构坐标” CreatureClass.h:11:18:错误:“结构坐标”的先前定义 您需要将struct coordination的定义放在一个公共位置,而不是复制它。是否可以创建一个新的坐标.h文件?不要忘记使用include-guard。您应该只在头文件中定义一次结构。将坐标移动

我有两个类:MazeClass和CreatureClass,它们使用一个名为“坐标”的结构,我如何能够在这两个类中使用该结构? 我尝试过两次将结构放入,结果得到:

MazeClass.h:16:8:错误:重新定义“结构坐标”

CreatureClass.h:11:18:错误:“结构坐标”的先前定义


您需要将
struct coordination
的定义放在一个公共位置,而不是复制它。是否可以创建一个新的
坐标.h
文件?不要忘记使用include-guard。

您应该只在头文件中定义一次结构。将
坐标
移动到它自己的头文件中(带有include-guard),然后将该头文件包含在其他两个头文件中

示例
坐标.h

#ifndef COORDINATES_H
#define COORDINATES_H

struct coordinates {
    // ...
};

#endif
从技术上讲,可以在两个标题中定义
坐标
(尽管从可维护性的角度来看很可怕——留下来!)。当另一个头文件或实现文件包含这两个头文件(直接或间接)时,问题就会出现——然后编译器看到两个不同的
坐标
结构定义(它不知道它们是相同的),并抱怨您发布的错误。

在代数中,这称为“分解”共同因素

创建一个“坐标.h”文件。在其中,使用include guards,放置坐标结构的定义


然后在MazeClass.h和CreatureClass.h中使用
#包括“coordinate.h”

您可以在其中一个类中公开声明结构。选择更相关的课程:

class MazeClass
{
public:
    struct coordinate {} ;
} ;
其他类可以通过
MazeClass::coordinate
访问此类型。或者,您可以将其与typedef一起带来

class CreatureClass
{
public:
    typedef MazeClass::coordinate coordinate ;
} ;

让我们来看看标题,特别是类和坐标是如何声明的,它们的结构是一样的吗?大多数答案都假设它们是,但两种不同类型之间很容易出现命名冲突。我发现这个解决方案很管用。我尝试了被接受的答案,但没有任何运气。谢谢,卡梅隆!